首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为反应式Spring WebClient (Spring-WebFlux)定义自定义HttpMessageConverter

如何为反应式Spring WebClient (Spring-WebFlux)定义自定义HttpMessageConverter
EN

Stack Overflow用户
提问于 2020-02-25 20:11:11
回答 2查看 2.8K关注 0票数 5

对于Spring org.springframework.web.client.RestTemplate来说,定义自己的HttpMessageConverter相对容易:

代码语言:javascript
复制
/**
 * Set the message body converters to use.
 * <p>These converters are used to convert from and to HTTP requests and responses.
 */
public void setMessageConverters(List<HttpMessageConverter<?>> messageConverters) {
    validateConverters(messageConverters);
    // Take getMessageConverters() List as-is when passed in here
    if (this.messageConverters != messageConverters) {
        this.messageConverters.clear();
        this.messageConverters.addAll(messageConverters);
    }
}

在将我的客户端转换为反应式WebClient时,我没有找到一种合适的方法来定义我自己的消息转换器,就像以前使用RestTemplate一样。

背景:我们的spring boot项目是基于Scala的,我们使用自己的转换器(基于com.fasterxml.jackson.module.scala.JacksonModule)来处理Scala Case类。

EN

回答 2

Stack Overflow用户

发布于 2020-03-02 12:04:08

您可以在反应式世界中通过WebClient.builder()为您的WebClient注册自定义编解码器(EncoderDecoderHttpMessageReaderHttpMessageWriter)。

代码语言:javascript
复制
  WebClient client = WebClient.builder()
                //see: https://github.com/jetty-project/jetty-reactive-httpclient
                //.clientConnector(new JettyClientHttpConnector())
                .clientConnector(new ReactorClientHttpConnector())
                .codecs(
                        clientCodecConfigurer ->{
                           // .defaultCodecs() set defaultCodecs for you
                           // clientCodecConfigurer.defaultCodecs();

                           //  You can customize an encoder based on the defualt config.
                           //  clientCodecConfigurer.defaultCodecs().jackson2Encoder(...)

                           // Or 
                           // use customCodecs to register Codecs from scratch.
                            clientCodecConfigurer.customCodecs().register(new Jackson2JsonDecoder());
                            clientCodecConfigurer.customCodecs().register(new Jackson2JsonEncoder());
                        }

                )
                .baseUrl("http://localhost:8080")
                .build();
票数 4
EN

Stack Overflow用户

发布于 2020-04-02 22:20:42

如果你使用Spring Boot和WebFlux,你可以添加一个CodecCustomizer bean,你可以用它来注册你自己的自定义编解码器:

代码语言:javascript
复制
@Bean
CodecCustomizer myCustomCodecCustomizer(...) {
    return configurer -> configurer.customCodecs().register(...);
}

顺便说一下,当在WebMVC中使用Spring Boot时,您只需将您的HttpMessageConverter实现添加为bean,它就会被使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60394358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档