我正在使用 jackson 為 json 序列化/反序列化撰寫帶注釋的模型類。
我有一個包含地圖的 json,其中鍵是一個列舉,值可以是不同的型別(包括陣列),具體取決于鍵值。
一個簡化的例子,這就是我需要的:
{
"key1": "string value",
"key2": [{"id":"1", "value": "test1"}, {"id":"2", "value": "test2"}]
}
我試過了,我得到了這個:
{
"KEY1": {"value": "string value"},
"KEY2": {"list": [{"id": "1", "value": "test1"}, {"id": "2", "value": "test2"}]}
}
因此,解包不起作用。
誰能告訴我我做錯了什么?
這是代碼:
public class Main {
public static void main(String[] args) throws Exception {
HashMap<Keys, ValueType> map = new HashMap<>();
map.put(Keys.KEY1, new StringValue("string value"));
map.put(Keys.KEY2, new ListValue( Arrays.asList(new Element[] {
new Element("1", "test1"),
new Element("2", "test2")
} )));
ObjectMapper objectMapper = new ObjectMapper();
String s = objectMapper.writeValueAsString(map);
System.out.println(s);
}
}
public enum Keys {
KEY1("key1"),
KEY2("key2");
private String value;
Keys(String s) {
this.value = s;
}
}
public interface ValueType {
}
public class StringValue implements ValueType {
@JsonUnwrapped
private String value;
public StringValue(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
public class ListValue implements ValueType {
@JsonUnwrapped
private List<Element> list;
public ListValue(List<Element> list) {
this.list = list;
}
public List<Element> getList() {
return list;
}
public void setList(List<Element> list) {
this.list = list;
}
}
public class Element {
@JsonProperty
private String id;
@JsonProperty
private String value;
public Element(String id, String value) {
this.id = id;
this.value = value;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
uj5u.com熱心網友回復:
您可以使用注釋來注釋類的 getter 方法,該JsonValue注釋指示帶注釋的訪問器的值將用作實體序列化的單個值,而不是收集 value 屬性的常用方法:
public class StringValue implements ValueType {
@JsonUnwrapped
private String value;
public StringValue(String value) {
this.value = value;
}
@JsonValue //<-- added annotation to the original getter method
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
public class ListValue implements ValueType {
@JsonUnwrapped
private List<Element> list;
public ListValue(List<Element> list) {
this.list = list;
}
@JsonValue //<-- added annotation to the original getter method
public List<Element> getList() {
return list;
}
public void setList(List<Element> list) {
this.list = list;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/387257.html
