我想反序列化一个用@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
班:
@JsonRootName("account")
public class Account {
private String id;
}
这是我需要反序列化的JSON:
{
"account": {
"id": "1234"
},
"lastTransactionID": "1"
}
由于我使用的是弹簧,因此我也进行了spring.jackson.deserialization.unwrap_root_value=true
的设置。
有没有什么办法可以解决这个问题?
OR
答案 0 :(得分:0)
解决此问题的最简单方法似乎是为Account
类创建包装器,并使用禁用的DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
功能照常反序列化json。
public static class Wrapper {
public Account account;
}
在这种情况下,其他字段将被忽略。
我知道这不是一个很好的解决方案,但是它解决了一个问题。
答案 1 :(得分:0)
我们可以使用ObjectMapper将json映射到java对象。
data_clean %>%
mutate(age_years = as.numeric(age_years))
答案 2 :(得分:0)
您可以在Account类上使用 JsonIgnoreProperties(ignoreUnknown = true)批注。请参阅以下链接以获取更多详细信息。
https://www.thetechnojournals.com/2019/10/entity-object-conversion-to-dto-object.html