Как сохранить регистр при сериализации с использованием объектного сопоставителя? - PullRequest
0 голосов
/ 17 октября 2019

У меня есть слушатель, который слушает очередь. Сообщение из очереди представляет собой текст в формате json. Мне нужно обработать их, а затем сохранить в базе данных mongodb. Я использовал DTO для входящих JSON. Проблема в том, что я могу сохранить данные только в нижнем регистре, так как я использовал DTO. Но входящие данные в верхнем регистре. Как я могу изящно сделать это, используя Джексона / Спринг?

Я пробовал @JsonGetter и @JsonSetter в DTO. Но это не сработало. Он все еще сохраняет данные в нижнем регистре.

Мини-версия моего кода:

DTO:

public String getMessage() {
return message;
}

@JsonSetter("MESSAGE")
public void setMessage(String message){
this.message = message;
}

Хранение данных:

mongoOperations.save(DTO,collectionname);

Документ в базе данных:

_id: ObjectId("5da831183852090ddc7075fb")
message: "hi"

Я хочу, чтобы данные в mongodb были:

_id: ObjectId("5da831183852090ddc7075fb")
MESSAGE: "hi"

Входящие данные имеют ключ как MESSAGE. Поэтому я бы хотел сохранить их. Я не хотел бы, чтобы имена полей DTO были в верхнем регистре.

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Должно работать с @JsonProperty ("MESSAGE"). Если нет (по какой-то причине), вы можете использовать настраиваемый сериализатор для этого поля

class CustomStringSerializer extends JsonSerializer<String> {

    @Override
    public void serialize(String value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
        jgen.writeStartObject();
        jgen.writeObjectField("MESSAGE", value);
        jgen.writeEndObject();
    }

}

и инициализатор таким образом:

    ObjectMapper objectMapper = new ObjectMapper();
    SimpleModule mod = new SimpleModule("message");
    mod.addSerializer(String.class, new CustomStringSerializer());
    objectMapper.registerModule(mod);
0 голосов
/ 18 октября 2019

Согласно @MichaelZiober в комментарии выше, ни одна из аннотаций, связанных с Джексоном, не помогла мне. @ Полевая аннотация весны сработала.

...