2017-04-03 160 views
3

我在我的objectmapperbuilder配置构造的混入,使用常规的弹簧网络控制器,根据本混入输出的数据。 然而,使用webflux,与返回的流量或单声道的方法的控制器具有数据序列等,如果objectmapper一个默认的。配置的ObjectMapper在弹簧引导webflux不使用

如何获得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); 
} 

回答

4

我竟然发现我的解决方案通过在init代码加强:

@Configuration 
public class Config { 

    @Bean 
    JavaTimeModule javatimeModule(){ 
     return new JavaTimeModule(); 
    } 

    @Bean 
    Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer(){ 
    return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.featuresToEnable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) 
      .mixIn(MyClass.class, MyClassMixin.class); 
    } 


    @Bean 
    Jackson2JsonEncoder jackson2JsonEncoder(ObjectMapper mapper){ 
     return new Jackson2JsonEncoder(mapper); 
    } 

    @Bean 
    Jackson2JsonDecoder jackson2JsonDecoder(ObjectMapper mapper){ 
     return new Jackson2JsonDecoder(mapper); 
    } 

    @Bean 
    WebFluxConfigurer webFluxConfigurer(Jackson2JsonEncoder encoder, Jackson2JsonDecoder decoder){ 
     return new WebFluxConfigurer() { 
      @Override 
      public void configureHttpMessageCodecs(ServerCodecConfigurer configurer) { 
       configurer.defaultCodecs().jackson2Encoder(encoder); 
       configurer.defaultCodecs().jackson2Decoder(decoder); 
      } 
     }; 

    } 
} 
+1

'@ EnableWebFlux'将关闭所有webflux自动配置,所以我不会在这里使用它。 –

+0

指出了这一点 – user1568967

+0

当用于'@ EnableWebFlux'定制webflux配置@BrianClozel谢谢,配置类可以从'WebFluxConfigurer延伸'直接简化结构的工作。 – Hantsy