Spring 集成:Json 带蛇形外壳的变压器
Spring Integration: Json transformer with snake case
我正在使用 Spring 集成 + Spring Cloud Stream 创建以下流程:
@Bean
public IntegrationFlow testEventFlow(){
return IntegrationFlows.from(TestEventSink.INPUT)
.transform(Transformers.fromJson(TestEvent.class))
.transform(TestEvent::getSomeId)
.log()
.channel("nullChannel")
.get();
}
测试事件class是:
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)
注释测试事件 class 它运行良好,但我无法注释 class 因为它来自第三方库。
我试过设置 属性 spring.jackson.property-naming-strategy=SNAKE_CASE
,但也没用。
我也试过:
@Bean
public ObjectMapper objectMapper(){
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
return mapper;
}
但是没有用。
我认为我可以为该转换使用自定义映射器,但我正在寻找可以同时更改所有 Spring 集成 JSON 转换器配置的东西。
提前致谢!
您错过了将 Spring 引导 ObjectMapper
自动配置注入 fromJson()
工厂的事实:
. transform(Transformers.fromJson(TestEvent.class),
new Jackson2JsonObjectMapper(objectMapper))
重点是 Spring 集成在 Spring 引导之前进行,但反之亦然,因此自动配置在 Spring 集成中是不可见的。
我正在使用 Spring 集成 + Spring Cloud Stream 创建以下流程:
@Bean
public IntegrationFlow testEventFlow(){
return IntegrationFlows.from(TestEventSink.INPUT)
.transform(Transformers.fromJson(TestEvent.class))
.transform(TestEvent::getSomeId)
.log()
.channel("nullChannel")
.get();
}
测试事件class是:
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)
注释测试事件 class 它运行良好,但我无法注释 class 因为它来自第三方库。
我试过设置 属性 spring.jackson.property-naming-strategy=SNAKE_CASE
,但也没用。
我也试过:
@Bean
public ObjectMapper objectMapper(){
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
return mapper;
}
但是没有用。
我认为我可以为该转换使用自定义映射器,但我正在寻找可以同时更改所有 Spring 集成 JSON 转换器配置的东西。
提前致谢!
您错过了将 Spring 引导 ObjectMapper
自动配置注入 fromJson()
工厂的事实:
. transform(Transformers.fromJson(TestEvent.class),
new Jackson2JsonObjectMapper(objectMapper))
重点是 Spring 集成在 Spring 引导之前进行,但反之亦然,因此自动配置在 Spring 集成中是不可见的。