[英]How to deserialize extra properties of json document into a map or other field with jackson?
[英]Jackson deserialize JSON with extra properties using @JsonRootName
我想反序列化一个用@JsonRootName
注释的对象。 然而,传输对象的 JSON 包含另一个额外的属性。 结果杰克逊抱怨:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Unexpected token (FIELD_NAME), expected END_OBJECT: Current token not END_OBJECT (to match wrapper object with root name 'account'), but FIELD_NAME at [Source: (ByteArrayInputStream); line: 1, column: 26]
com.fasterxml.jackson.databind.exc.MismatchedInputException: Unexpected token (FIELD_NAME), expected END_OBJECT: Current token not END_OBJECT (to match wrapper object with root name 'account'), but FIELD_NAME at [Source: (ByteArrayInputStream); line: 1, column: 26]
。
显然, @JsonRootName
注释对象的反序列化仅在该对象是 JSON 文件中的唯一属性"lastTransactionID"
- 因为它不希望"lastTransactionID"
在那里。
这是我的Account
类:
@JsonRootName("account")
public class Account {
private String id;
}
这是我需要反序列化的 JSON:
{
"account": {
"id": "1234"
},
"lastTransactionID": "1"
}
因为我使用的是 spring,所以我也有这个设置spring.jackson.deserialization.unwrap_root_value=true
。
有没有办法解决这个问题:
或者
看起来解决这个问题的最简单方法是为Account
类创建包装器,并像往常一样使用禁用的DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
功能反序列化 json。
public static class Wrapper {
public Account account;
}
在这种情况下,其他字段将被忽略。
我知道这不是一个好的解决方案,但它解决了一个问题。
我们可以使用 ObjectMapper 将 json 映射到 java 对象。
public Account jsonToObject(Map<String, Object> map){
ObjectMapper objectMapper = new ObjectMapper();
Account account = objectMapper.convertvalue(map.get("account"),Account.class);
return account;
}
您可以在 Account 类上使用JsonIgnoreProperties(ignoreUnknown=true)注释。 请参阅以下链接了解更多详情。
https://www.thetechnojournals.com/2019/10/entity-object-conversion-to-dto-object.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.