使用对象映射器进行序列化时如何保持大小写?

时间:2019-10-17 11:29:36

标签: spring jackson dto

我有一个监听队列的监听器。队列中的消息是json文本。我需要处理它们,然后保存在mongodb数据库中。我已经将DTO用于传入的json。问题是我只能使用DTO才能将数据保存为小写。但是,传入的数据是大写的。如何使用杰克逊/弹簧来优雅地做到这一点?

我在DTO中尝试了@JsonGetter和@JsonSetter。但是,那没有用。仍将数据保存为小写。

我的代码的迷你版:

DTO:

public String getMessage() {
return message;
}

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

Datasaver:

mongoOperations.save(DTO,collectionname);

数据库中的文档:

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

我希望mongodb中的数据为:

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

传入数据的密钥为MESSAGE。因此,我也想存储同样的密钥。我不希望DTO字段名称大写。

2 个答案:

答案 0 :(得分:0)

根据@MichaelZiober在上述评论中,与杰克逊相关的所有注释都无法满足我的需求。 spring的@Field注释有效。

答案 1 :(得分:0)

应该与@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);