我正在尝试使用JMSTemplate将JSON消息发布到主题。这段代码已经存在于一个应用程序中,我只是将其复制到另一个应用程序中,因为我们试图将两个应用程序合并为一个应用程序。我发现代码现在正在发送 JSON 消息,这些消息的第一个字母大写为JSONArray
和JSONObject
字段名称。
我正在使用带有消息转换器的 JMS 模板,该消息转换器接收对象映射器以从 POJO 转换为 JSON。 我的新代码中唯一真正的区别是我使用的是较新版本的 spring boot。我知道这会更新所有杰克逊依赖项,所以也许这就是发生此更改的原因。我最终尝试在我的对象映射器上设置命名策略,但这似乎不起作用。我最初在我的 bean 定义中这样做了,但为了看看它是否真的有效,我在做convertAndSend
之前尝试了它,但它不起作用。我仍然得到大写的JSON对象和数组名称。
public void sendMessage(Object responseToSend) {
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE);// does not seem to make a difference
try {
System.out.println(objectMapper.writeValueAsString(responseToSend));//prints array and object names with the first letter capitolized
} catch (JsonProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
jmsTemplatePublish.convertAndSend("REDACTED",
responseToSend);
}
因此,例如,我的新应用程序正在发送类似的东西。
"Quote":[{"QuoteInformation":{"Inputs":{"exampleField":false,"ExampleWritten":{"dwelling":true}}
以前是这样的
"quote":[{"quoteInformation":{"inputs":{"exampleField":false,"exampleWritten":{"dwelling":true}}
你@Kachopsticks在objectMapper命名策略配置中尝试过PropertyNamingStrategy.LOWER_CASE而不是使用PropertyNamingStrategy.LOWER_CAMEL_CASE。
这个豆子是罪魁祸首。不得不删除.modulesToInstall(JaxbAnnotationModule.class(;
@SuppressWarnings("unchecked")
@Bean
public Jackson2ObjectMapperBuilder objectMapperBuilder() {
return Jackson2ObjectMapperBuilder.json()
.serializationInclusion(JsonInclude.Include.NON_EMPTY)
.defaultViewInclusion(true)
.modulesToInstall(JaxbAnnotationModule.class);
}