我正在使用Spring Integration + Spring Cloud Stream创建以下流程:
@Bean
public IntegrationFlow testEventFlow(){
return IntegrationFlows.from(TestEventSink.INPUT)
.transform(Transformers.fromJson(TestEvent.class))
.transform(TestEvent::getSomeId)
.log()
.channel("nullChannel")
.get();
}
测试事件类为:
public class TestEvent {
private String someId;
public TestEvent(){}
public TestEvent(String someId){
this.someId = someId;
}
public String getSomeId(){
return someId;
}
public void setSomeId(String someId){
this.someId = someId;
}
}
这里的问题是来自TestEventSink.INPUT
的消息以蛇形出现:
{ "some_id" : "1234" }
如果我用@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
注释测试事件类,则效果很好,但是由于来自第三方库,所以无法注释该类。
我试图设置属性spring.jackson.property-naming-strategy=SNAKE_CASE
,但是它也不起作用。
我也尝试过:
@Bean
public ObjectMapper objectMapper(){
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
return mapper;
}
但这没用。
我认为我可以使用自定义映射器进行该转换,但是我正在寻找可以同时更改所有Spring Integration JSON转换器的配置的东西。
谢谢!
答案 0 :(得分:1)
您缺少将Spring Boot ObjectMapper
自动配置的注入到fromJson()
工厂的事实:
. transform(Transformers.fromJson(TestEvent.class),
new Jackson2JsonObjectMapper(objectMapper))
重点是Spring Integration在Spring Boot之前出现,反之亦然,因此自动配置在Spring Integration中不可见。