【发布时间】:2019-06-27 12:41:15
【问题描述】:
我想反序列化一个带有@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]。
显然,@JsonRootName 注释对象的反序列化仅在该对象是 JSON 文件中的唯一属性时才有效 - 因为它不期望 "lastTransactionID" 存在。
这是我的Account 课程:
@JsonRootName("account")
public class Account {
private String id;
}
这是我需要反序列化的 JSON:
{
"account": {
"id": "1234"
},
"lastTransactionID": "1"
}
因为我使用的是 spring,所以我也有这个设置 spring.jackson.deserialization.unwrap_root_value=true。
有没有办法解决这个问题:
- 必须编写自定义反序列化程序?
或
- 在反序列化发生之前拦截响应并剥离它的额外属性?
【问题讨论】:
标签: java json-deserialization jackson2