如何在使用对象映射器序列化期间保持大小写?
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);
我有一个侦听队列的侦听器。来自队列的消息是 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);