对于Spring org.springframework.web.client.RestTemplate来说,定义自己的HttpMessageConverter相对容易:
/**
* 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类。
发布于 2020-03-02 12:04:08
您可以在反应式世界中通过WebClient.builder()为您的WebClient注册自定义编解码器(Encoder、Decoder、HttpMessageReader、HttpMessageWriter)。
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();发布于 2020-04-02 22:20:42
如果你使用Spring Boot和WebFlux,你可以添加一个CodecCustomizer bean,你可以用它来注册你自己的自定义编解码器:
@Bean
CodecCustomizer myCustomCodecCustomizer(...) {
return configurer -> configurer.customCodecs().register(...);
}顺便说一下,当在WebMVC中使用Spring Boot时,您只需将您的HttpMessageConverter实现添加为bean,它就会被使用。
https://stackoverflow.com/questions/60394358
复制相似问题