Gson, Jackson, Flaten Map/HashMap
Скажем, у меня есть POJO следующим образом -
public class Pojo {
String name;
String address;
Map<String, String> values;
//getter/setters
}
Если я преобразую его в String
в JSON
форматирование с использованием Jackson
, следующее -
Pojo pojo= new Pojo ();
pojo.setName("My Name");
pojo.setAddress("Yet not found");
Map<String, String> map = new HashMap<>();
map.put("key1", "val1");
map.put("key2", "val2");
map.put("key3", "val3");
pojo.setValues(map);
ObjectMapper objectMapper = new ObjectMapper();
String str = objectMapper.writeValueAsString(parentPojo);
System.out.println(str);
Я получаю String
в JSON
отформатировать следующим образом -
{
"name": "My Name",
"address": "Yet not found",
"values": {
"key1": "val1",
"key2": "val2",
"key3": "val3"
}
}
Есть ли способ, я могу сделать это следующим образом, используя Gson/Jackson
?
{
"name": "ParentName",
"address": "Yet not found",
"key1": "val1",
"key2": "val2",
"key3": "val3"
}
ПРИМЕЧАНИЕ. - Я знаю, что это легко сделать, если поместить все в Map
Но я не могу этого сделать, у меня есть другая бизнес-логика, которая зависит от них.
1 ответ
Решение
С Джексоном, аннотировать getValues()
с @JsonAnyGetter
а также setValues()
с @JsonAnySetter
:
public class Pojo {
private String name;
private String address;
private Map<String, String> values;
// Getters and setters for name and address
@JsonAnyGetter
public Map<String, String> getValues() {
return values;
}
@JsonAnySetter
public void setValues(Map<String, String> values) {
this.values = values;
}
}