我有一个监听队列的监听器。队列中的消息是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字段名称大写。
答案 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);