网站建设案例企业,wordpress 下载选择,推广培训,友情链接交易前言 Spring6和Spring Boot3的正式发布也有一段时间了#xff0c;最低支持的java版本也是直接跳到了17。而且最近java21也出来了#xff0c;作为一个javaer#xff0c;你不会还在坚守java8吧#xff1f;
Http Interface是Spring6新推出的一个声明式http客户端#xff0c;…前言 Spring6和Spring Boot3的正式发布也有一段时间了最低支持的java版本也是直接跳到了17。而且最近java21也出来了作为一个javaer你不会还在坚守java8吧
Http Interface是Spring6新推出的一个声明式http客户端写法有点像Retrofit。最近也是在一个新的项目里引入了Http Interface但是目前相关资料还是比较少的碰到一些问题还是会花费些时间精力。
问题
这次遇到的问题是使用Http Interface请求一个接口然后用到其中的返回结果做json解析。这个http返回的content-type是text/html; charsetutf-8我所使用的json解析工具是jackson。但是对其中的内容转java对象时却一直失败下面是解决方案。
解决
问题的原因实际上是Http interface中的jackson解码器不支持解码text/html的类型因此我们只要让它做到支持就可以了。
首先在构造WebClient的时候使用.codecs()方法来添加自定义转换器
Configuration
public class RestClientConfig {Beanpublic ChatCompletionDMClient chatCompletionDMClient() {WebClient webClient WebClient.builder().baseUrl(BASE_URL)// 添加自定义转换text/html;charsetutf-8.codecs(clientCodecConfigurer - {clientCodecConfigurer.customCodecs().register(new DecoderHttpMessageReaderObject(new TextHtml2HttpMessageConverter()));}).build();HttpServiceProxyFactory httpFactory HttpServiceProxyFactory.builder().clientAdapter(WebClientAdapter.forClient(webClient)).build();return httpFactory.createClient(ChatCompletionDMClient.class);}}
接着看一下使用的地方添加上accept text/html; charsetutf-8
PostExchange(url /dialogue/,contentType MediaType.MULTIPART_FORM_DATA_VALUE,accept text/html; charsetutf-8)ResponseEntityDMChatCompletionResult createChatCompletion(RequestPart(content) String content,RequestPart(history) String history);
这样就可以实现使用http interface来将http结果中的text/html的json数据转为java对象了。