Gson, Jackson, Flaten Map / HashMap - PullRequest
       25

Gson, Jackson, Flaten Map / HashMap

0 голосов
/ 03 июля 2018

Скажи, что у меня есть 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 Ответ

0 голосов
/ 03 июля 2018

С Джексоном, аннотируйте 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;
    }
}
...