我在我的objectmapperbuilder配置中配置了mixin,使用常规的spring web控制器,根据mixin输出数据。然而,使用webflux,一个带有返回Flow或Mono方法的控制器会将数据序列化,就像objectmapper是默认的一样。
如何让webflux强制使用一个objectmapper配置?
示例配置:
@Bean
JavaTimeModule javatimeModule(){
return new JavaTimeModule();
}
@Bean
Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer(){
return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.featuresToEnable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.mixIn(MyClass.class, MyClassMixin.class);
}
字符串
6条答案
按热度按时间j2cgzkjk1#
实际上,我通过单步执行init代码找到了解决方案:
字符串
iyfamqjs2#
为了方便起见,我将@Alberto Galiana的解决方案翻译成了Java,并注入了配置的Objectmapper,这样你就不必进行多次配置:
字符串
gmol16393#
只需实现WebFluxConfigurer,覆盖方法configureHttpMessageCodecs
Sping Boot 2 +Kotlin示例代码
字符串
确保要编码/解码的所有数据类的所有属性都使用**@JsonProperty**注解,即使class和json数据中的属性名称相同
型
uttx8gqw4#
在我的例子中,我尝试使用自定义的
ObjectMapper
,同时继承应用默认WebClient
的所有行为。我发现我必须使用
WebClient.Builder.codecs
。当我使用WebClient.Builder.exchangeStrategies
时,提供的覆盖被忽略。不确定这种行为是否是特定于使用WebClient.mutate
的,但这是我发现的唯一有效的解决方案。字符串
d4so4syb5#
我已经尝试了所有不同的解决方案(
@Primary @Bean
用于ObjectMapper
,configureHttpMessageCodecs()
等)。最后对我起作用的是指定MIME类型。下面是一个例子:字符串
ct3nt3jp6#
正如我在回答here中所解释的,你可以省略臃肿的编解码器配置,只像这样定义bean:
字符串
主要问题是Sping Boot 会自动配置
WebClient
builder,而不是实际的示例。手动创建的WebClient
示例使用其内置的默认Map器,因此您必须手动配置编解码器。