如何在使用对象映射器序列化期间保持大小写?

How to maintain case during serializing using object mapper?

我有一个侦听队列的侦听器。来自队列的消息是 json 文本。我需要处理它们,然后保存在 mongodb 数据库中。我为传入 json 使用了 DTO。问题是我只能将数据保存为小写,因为我使用了 DTO。但是,传入的数据是大写的。如何使用 jackson/spring 优雅地执行此操作?

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

我的代码的迷你版:

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.So,我想存储相同的数据。我不希望 DTO 字段名称是大写的。

根据@MichaelZiober 在上面的评论,none 与杰克逊相关的注释帮助了我的需要。 spring 的@Field 注释有效。

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