首页 > 解决方案 > 自定义 MessageConverter 在 Spring Boot 中不起作用

问题描述

我想MessageConverter在 Spring Boot 中注册一个自定义项,以便更好地控制消息的转换方式。我有一个 Spring Boot 2.1.7 Webflux 应用程序。

我创建了我的自定义转换器:

public class CustomConverter extends MappingJackson2HttpMessageConverter {
    ...
}

并注册:

@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {
    return new CustomConverter();
}

我还确认它是通过自动装配注册的,HttpMessageConverters并确认它在转换器列表中。然后我实现了一些我期望被调用的方法,例如canRead, canWrite, readInternalwriteInternal并在它们上放置断点。我的应用程序公开了一个使用 JSON 响应的 Rest 端点,还调用了一个外部 Rest 服务,该服务 POST 一个 JSON 有效负载并接收 JSON 作为回报。

在任何时候我都看不到我的转换器正在被使用。我什至删除了所有其他转换器,只留下我自己的,但它仍然没有被调用。

我错过了什么吗?

标签: spring-bootspring-webflux

解决方案


在我的 WebFlux 应用程序中,我必须执行以下操作才能使其正常工作:

@Bean
public WebFluxConfigurer webFluxConfigurer(){

    return new WebFluxConfigurer() {
        @Override
        public void configureHttpMessageCodecs(ServerCodecConfigurer configurer) {
            configurer.registerDefaults(false);
            configurer.customCodecs().encoder(new CustomEncoder());
            configurer.customCodecs().decoder(new CustomDecoder());
        }
    };

}

推荐阅读