Мне нужно было преобразовать объекты java в Map<String, String>
для обложки api REST, которую я пишу. Любые поля, которые были сложными объектами, должны были быть сериализованы для json. Я понял, как сделать это так:Как преобразовать карту <String, String> с значениями json в POJO с помощью джексона?
public static Map<String, String> toContentMap(Object object) throws JsonProcessingException {
Map<String, Object> objectParamMap = MAPPER.convertValue(object, new TypeReference<Map<String, Object>>() {});
Map<String, String> contentMap = new HashMap<>();
for (Entry<String, Object> entry : objectParamMap.entrySet()) {
String key = entry.getKey();
String value = MAPPER.writeValueAsString(entry.getValue());
contentMap.put(key, StringUtils.strip(value, "\""));
}
return contentMap;
}
Теперь мне нужен способ, чтобы получить от этого Map<String, String>
представления в объект Pojo. Можно ли это сделать, используя в основном jackson apis?
Редактировать:
Я думаю, я был неясно. Я знаю POJO, из которого я иду/из. Но он должен быть общим и работать для любого базового POJO.
Пример:
class MyObject {
String fieldA;
Long fieldB;
MyOtherObject fieldC;
List<String> fieldD;
}
class MyOtherObject {
String fieldA;
String fieldB;
}
MyObject object = new MyObject("valueA", 20L,
new MyOtherObject("valueA", "valueB"),
Lists.newArrayList("array1", "array2"));
Map<String, String> contentMap = toContentMap(object);
/*
"fieldA" -> "valueA"
"fieldB" -> "20"
"fieldC" -> "{\"fieldA\":\"valueA\",\"fieldB\":\"valueB\"}"
"fieldD" -> "[\"array1\",\"array2\"]"
*/
MyObject newObject = fromContentMap(contentMap);
assertEquals(object, newObject)
Сам 'JSONObject' в основном представляет собой« Map ', так зачем вам нужно преобразовывать в« Map »? –
Было бы также полезно, если бы вы включили в свой вопрос объект POJO. –
Если вы не знаете, к какому классу следует десериализовать, то как вы могли бы создать экземпляр этого неизвестного класса? –