Извлеките значения из карты (это поле) и запишите их в JSON.

Используя 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.

Как мне тогда объявить мою карту для сериализации?


person Andrew    schedule 19.03.2018    source источник
comment
Возможный дубликат Сериализация/десериализация Map‹String, Object› с Джексоном   -  person Catalin    schedule 19.03.2018
comment
@Catalin, это не то, чего хочет ОП   -  person XtremeBaumer    schedule 19.03.2018
comment
Я думаю, что вы хотите против представления объектов JSON. Если вы получите такой JSON, вам понадобится какой-то пользовательский синтаксический анализатор, потому что вы не можете напрямую сказать, какие объекты взяты с карты, а какие нет.   -  person XtremeBaumer    schedule 19.03.2018
comment
@XtremeBaumer хорошо, спасибо за ответ   -  person Andrew    schedule 19.03.2018
comment
Вы можете написать собственный сериализатор для этого   -  person user7    schedule 19.03.2018
comment
@ user7 да, я уже делаю это, спасибо   -  person Andrew    schedule 19.03.2018