[英]Deserialize JSON to object encapsulating list
由於將諸如List<String>
類的原始類型留在應用程序中是一種不良習慣,因此我決定使用以下類將其封裝:
public class EncapsulatedList {
@JsonProperty
private List<String> someWords;
/*
Some setters, getters and so on
*/
}
但是它被序列化為:
{
"someWords": [
"cheese",
"random cheese",
"more random cheese"
]
}
將其作為一個簡單的列表會更好很多:
[
"cheese",
"random cheese",
"more random cheese"
]
有沒有一種干凈的方法可以使用Jackson 2來實現此目的,而不必像先反序列化列表並將其放入封裝類那樣顯式地執行此操作?
從@JsonUnwrapped
的JavaDoc中:
另請注意,注釋僅在以下情況下適用
- 將值序列化為JSON對象(無法使用此機制解包JSON數組)
如果您不想直接使用String[]
或List<String>
,則可以隨時自己反序列化類型,例如:
class EncapsulatedListDeserializer extends StdDeserializer<EncapsulatedList> {
// ctor omitted
public EncapsulatedList deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
JsonNode node = p.getCodec().readTree(p);
List<String> list = new ArrayList<>();
if (node.isArray()) {
for (JsonNode value : node) {
list.add(value.asText());
}
}
return new EncapsulatedList(list);
}
}
至少在某種程度上抽象化了反序列化並手動調用了setter。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.