![](/img/trans.png)
[英]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.