我正在尝试反序列化以下JSON
{
"deliverLumpSum": 0.0,
"faxQId": "{\"type\":\"TAKEAWAY\",\"data\":{\"orderId\":\"AWSWD-AWSAW\",\"orderKey\":\"DERS34S32SD\"}}"
}
在以下自定义反序列化程序的帮助下
public class OrderIdDeserializer extends JsonDeserializer<OrderId> {
@Override
public OrderId deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
OrderId orderId = jsonParser.readValueAs(OrderId.class);
return orderId;
}
}
进入以下对象结构
@Data
public class AddInfo {
protected double deliverLumpSum;
@JsonDeserialize( using = OrderIdDeserializer.class)
public OrderId orderId;
}
@Data
public class OrderId {
private String type;
private TakeawayData data;
}
@Data
public class TakeawayData {
private String orderId;
private String orderKey;
}
我得到以下错误
通用域名格式。fasterxml。杰克逊。数据绑定。exc.MismatchedInputException:无法构造OrderId的实例(尽管至少存在一个创建者):没有从字符串值反序列化的字符串参数构造函数/工厂方法({“type”:“TAKEAWAY”,“data”:{“OrderId”:“AWSWD-AWSAW”,“orderKey”:“DERS34S32SD”}}})
我做错了什么?我该如何解决这个问题?
首先,您的JSON示例("faxQId":
)与您的Java类AddInfo
不匹配:
@JsonDeserialize( using = OrderIdDeserializer.class)
public OrderId orderId;
我猜这只是一个复制粘贴错误,你真的是说
@JsonDeserialize( using = OrderIdDeserializer.class)
public OrderId faxQId;
现在来看真正的问题。在“faxQId”之后的JSON内容:有一个包含JSON代码的JSON字符串(带有正确转义的引号)
"faxQId": "{\"type\":\"TAKEAWAY\",\"data\":{\"orderId\":\"AWSWD-AWSAW\",\"orderKey\":\"DERS34S32SD\"}}"
而不仅仅是一个普通的JSON对象,比如
"faxQId": {"type":"TAKEAWAY","data":{"orderId":"AWSWD-AWSAW","orderKey":"DERS34S32SD"}}"
因此,在反序列化器中,您需要额外的步骤将此String反序列化为Java对象。
public class OrderIdDeserializer extends JsonDeserializer<OrderId> {
@Override
public OrderId deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
// Get the JSON text (with the \ already decoded):
// {"type":"TAKEAWAY","data":{"orderId":"AWSWD-AWSAW","orderKey":"DERS34S32SD"}}
String s = jsonParser.getValueAsString();
// We need a second parser for deserializing the JSON text
JsonParser jsonParser2 = jsonParser.getCodec().getFactory().createParser(s);
// Convert the JSON text into an object
return jsonParser2.readValueAs(OrderId.class);
}
}
我使用RestTemplate。exchange在我的Spring Boot应用程序中获得以下响应: 广告商。java: 广告商java: 但我有以下例外: 我不明白为什么id“1057343”不能反序列化。 你能帮忙吗?提前谢谢
我正在尝试反序列化以下JSON: 我已反序列化文件: 在以下对象结构中: 规则efinition.java 定义。爪哇 和JAVA 我得到了以下错误 我看到问题是因为'and-condition-1'只是一个值,我如何反序列化这些,我想知道我应该写一个自定义反序列化器(或者)有什么解决方法吗?
问题内容: 使用包中的类时遇到了json解析问题,而我得到的错误是: 发生此问题的Web应用程序是使用AngularJS前端的Spring MVC应用程序,但我可以使用更小的所有Java程序来复制该问题。这是我的豆子: Shipment.java Activity.java ActivityLocation.java 地址.java 这是我可以正确映射json的代码: 调整var中的数据时,遇到了
我正在尝试使用RestTemplate(Spring Boot)读取来自rest服务的响应: 但当响应中存在错误数组时: 我不明白为什么没有构造器/工厂方法从字符串值反序列化。 谢谢
我是Spring DataJPA+REST项目的新手,我正在尝试使用OneToOne单向关系执行从reference EmployerType添加新的或编辑雇主。当我试图添加或编辑数据时,我会得到以下错误: 下面是关于这些课程的信息。 Rest控制器
我有一个XML文档,需要将其转换(反序列化)为Java POJO。我无法更改XML文档的结构。我使用Java 8和Jackson框架进行映射。渐变依赖项: 包装XML文档: 要分析的XML文档: 解析文档的方法: 例外情况: 顶行显示: 它引用的值来自此标记下: 如果我移动标签,