当前位置: 首页 > 知识库问答 >
问题:

如何将java.lang.String实例反序列化出START_OBJECT令牌

祝锐
2023-03-14

我有一个JSON:

{
  "clientId": "1",
  "appName": "My Application",
  "body": "Message body",
  "title": "Title"
  "data": {
    "key1": "value1",
    "key2": "value2"
  }
}

和DTO:

@Data
public class PushNotificationDto {
  private Long clientId;
  private String appName;
  private String body;
  private String title;
  private String data;
}
@RestController
@AllArgsConstructor
public class PushNotificationController {

  private PushNotificationService pushNotificationService;

  @PostMapping("/push-notification")
  void sendPushNotification(@RequestBody PushNotificationDto pushNotification) {
    pushNotificationService.send(pushNotification);
  }
}

由于json对象中的数据字段实际上是一个对象,但在我的DTO中它是一个字符串,所以我得到了一个异常:

org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: 
Can not deserialize instance of java.lang.String out of START_OBJECT token; 
nested exception is com.fasterxml.jackson.databind.JsonMappingException:
Can not deserialize instance of java.lang.String out of START_OBJECT token

我可以做什么来成功执行这样的反序列化?

共有1个答案

百里朝
2023-03-14

在请求对象中,有一个数据数组

"data": {
  "key1": "value1",
  "key2": "value2"
}

但是在PushNotificationDTo对象中有字符串数据。这就是你得到这个错误的原因。要解决此错误,可以将字符串数据更改为映射

 类似资料: