Ключ и значение сериализации Джексона из одного объекта - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь создать собственный сериализатор для генерации объекта Pair, но я хочу избежать полей «ключ» и «значение» при сериализации объекта.

Объект pojo:

public class TypeObjectPair implements Serializable {


    private final String canonicalObjectName;
    private final Object object;


    public String getKey() {
        return canonicalObjectName;
    }

    public Object getValue() {
        return object;
    }


}

Класс человека.(Теоретически это может быть любой другой класс объектов)

class Person{
    int id;
    String name;
}

Конечный объект для сериализации:

TypeObjectPair obj = new TypeObjectPair("com.example.Person", new Person(1, "Peter"));

Требуемый вывод:

{
    "com.example.object" : {
                              "id" : 1,
                              "name" : "Peter"    
                           }
}

Любые идеи о том, как достичьЭто?

1 Ответ

0 голосов
/ 12 июня 2018

Вы можете использовать Map<K, V> с @JsonAnyGetter:

public class TypeObjectPair {

    private Map<String, Object> data = new HashMap<>();

    public TypeObjectPair(String key, Object value) {
        data.put(key, value);
    }

    @JsonAnyGetter
    public Map<String, Object> getData() {
        return data;
    }
}

Затем использовать следующим образом:

ObjectMapper mapper = new ObjectMapper();
TypeObjectPair pair = new TypeObjectPair("com.example.object", new Person(1, "Peter"));
String json = mapper.writer().withDefaultPrettyPrinter().writeValueAsString(pair);

Вывод будет:

{
  "com.example.object" : {
    "id" : 1,
    "name" : "Peter"
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...