我想反序列化带有@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]
。
[带注释的对象的显然反序列化仅在该对象是JSON文件中的唯一属性时才有效-因为它不希望@JsonRootName
存在。
这是我的"lastTransactionID"
课:
Account
这是我需要反序列化的JSON:
@JsonRootName("account")
public class Account {
private String id;
}
由于我使用弹簧,所以我也有此设置{
"account": {
"id": "1234"
},
"lastTransactionID": "1"
}
。
没有任何方法可以解决此问题:
OR
看来,解决此问题的最简单方法是为spring.jackson.deserialization.unwrap_root_value=true
类创建包装,并照常使用Account
功能禁用来反序列化json。
DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
在这种情况下,其他字段将被忽略。
我知道这不是一个很好的解决方案,但是它解决了一个问题。
您可以在Account类上使用JsonIgnoreProperties(ignoreUnknown = true)批注。请参考以下链接了解更多详情。public static class Wrapper {
public Account account;
}
我们可以使用ObjectMapper将json映射到java对象。
https://www.thetechnojournals.com/2019/10/entity-object-conversion-to-dto-object.html