2017-04-03 1 views
3

Ich habe Mixins in meiner Objektmapperbuilder-Konfiguration konfiguriert, mit dem regulären Feder-Web-Controller, die Daten entsprechend den Mixins ausgegeben. Bei der Verwendung von webflux werden die Daten in einem Controller mit einer Methode, die einen Flow oder einen Mono zurückgibt, serialisiert, als ob das Objektmapper standardmäßig ist.Konfigurierter ObjectMapper nicht in Spring-Boot-Webflux verwendet

Wie Webflux zu erzwingen, um eine Objektmapper-Konfiguration zu erzwingen verwendet werden?

Beispielconfig:

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

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

Antwort

4

ich meine Lösung tatsächlich durch Schreiten durch den Init-Code gefunden:

@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' alle webflux Auto-Konfiguration deaktivieren, so würde ich nicht benutze es hier. –

+0

@BrianClozel Danke für den Hinweis – user1568967

+0

Wenn '@ EnableWebFlux' zum Anpassen der Webflux-Konfiguration verwendet wird, kann die Konfigurationsklasse direkt von' WebFluxConfigurer' erweitert werden, um die Konfiguration zu vereinfachen. – Hantsy

Verwandte Themen