Используя ObjectMapper
из com.fasterxml.jackson.databind
, можно ли извлечь значения из карты и записать их в JSON? Без дополнительной метки для карты?
Например, у нас есть класс:
public class LoginInfoJSON {
private Map<String, Object> properties = new HashMap<>();
private String username;
private String password;
//getters and setters + constructor
}
Если мы попытаемся преобразовать его в JSON, это будет:
{
"properties":
{
"numberTest":22,
"array":["John","Anna","Peter"],
"nullTest":null,
"booleanTest":true,
"employee":{"name":"John","age":30,"city":"New York"},
"stringTest":"String"
},
"username":"pwe",
"password":"pwe"
}
Но можно ли сделать так?
{
"numberTest":22,
"array":["John","Anna","Peter"],
"nullTest":null,
"booleanTest":true,
"employee":{"name":"John","age":30,"city":"New York"},
"stringTest":"String",
"username":"pwe",
"password":"pwe"
}
Может быть, какая-то аннотация может справиться с этим?
Может ли кто-нибудь предложить что-нибудь?
ИЗМЕНИТЬ
Как было предложено - я должен написать свой собственный сериализатор,
но сейчас я столкнулся с проблемой: вот мой серизлизер:
public class ItemSerializer extends JsonSerializer<Map<String, Object>> {
@Override
public void serialize(Map<String,Object> map, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
Annotation[] mapAnnotations = map.getClass().getAnnotations();
for(int i = 0; i < mapAnnotations.length; i++){
if(mapAnnotations[i].getClass().isInstance(MapPropertiesAnnotation.class)){
jsonGenerator.writeStartObject();
for(Map.Entry<String, Object> mapEntry : map.entrySet()){
jsonGenerator.writeObjectField(mapEntry.getKey(), mapEntry.getValue());
}
jsonGenerator.writeEndObject();
}
}
}
}
Затем я добавляю это как модуль в ObjectMapper
:
public class MapModule extends SimpleModule {
public MapModule() {
addSerializer(Map.class, new ItemSerializer());
}
}
И здесь во время сборки maven я сталкиваюсь с ошибкой:
error: method addSerializer in class SimpleModule cannot be applied to given types;
поэтому я думаю, что проблема в том, что я пытаюсь сериализовать (Map<String, Object>)
, а не только Map
.
Как мне тогда объявить мою карту для сериализации?