我正在尝试反序列化以下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;
}
我收到以下错误
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `OrderId` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('{"type":"TAKEAWAY","data":{"orderId":"AWSWD-AWSAW","orderKey":"DERS34S32SD"}}')
我怎么办?我该如何解决这个问题?
thx
答案 0 :(得分:0)
在deserialize私有字段中,您必须添加getter或/和setter
设置器使非公共字段只能反序列化
或者只是将其公开
public class OrderId {
public String type;
public TakeawayData data;
}
public class TakeawayData {
public String orderId;
public String orderKey;
}