前言
Spring6和Spring Boot3的正式發(fā)布也有一段時(shí)間了,最低支持的java版本也是直接跳到了17。而且最近java21也出來了,作為一個(gè)javaer,你不會還在堅(jiān)守java8吧?
Http Interface是Spring6新推出的一個(gè)聲明式http客戶端,寫法有點(diǎn)像Retrofit。最近也是在一個(gè)新的項(xiàng)目里引入了Http Interface,但是目前相關(guān)資料還是比較少的,碰到一些問題還是會花費(fèi)些時(shí)間精力。
問題
這次遇到的問題是:使用Http Interface請求一個(gè)接口,然后用到其中的返回結(jié)果做json解析。這個(gè)http返回的content-type是text/html; charset=utf-8
,我所使用的json解析工具是jackson。但是對其中的內(nèi)容轉(zhuǎn)java對象時(shí)卻一直失敗,下面是解決方案。
解決
問題的原因?qū)嶋H上是Http interface中的jackson解碼器不支持解碼text/html的類型,因此我們只要讓它做到支持就可以了。
首先在構(gòu)造WebClient的時(shí)候使用.codecs()方法
來添加自定義轉(zhuǎn)換器:
@Configuration
public class RestClientConfig {
@Bean
public ChatCompletionDMClient chatCompletionDMClient() {
WebClient webClient = WebClient.builder()
.baseUrl(BASE_URL)
// 添加自定義轉(zhuǎn)換text/html;charset=utf-8
.codecs(clientCodecConfigurer -> {
clientCodecConfigurer.customCodecs()
.register(new DecoderHttpMessageReader<Object>(
new TextHtml2HttpMessageConverter()));
})
.build();
HttpServiceProxyFactory httpFactory = HttpServiceProxyFactory.builder()
.clientAdapter(WebClientAdapter.forClient(webClient))
.build();
return httpFactory.createClient(ChatCompletionDMClient.class);
}
}
接著看一下使用的地方,添加上accept = "text/html; charset=utf-8"
:文章來源:http://www.zghlxwxcb.cn/news/detail-729907.html
@PostExchange(url = "/dialogue/",
contentType = MediaType.MULTIPART_FORM_DATA_VALUE,
accept = "text/html; charset=utf-8")
ResponseEntity<DMChatCompletionResult> createChatCompletion(
@RequestPart("content") String content,
@RequestPart("history") String history);
這樣就可以實(shí)現(xiàn)使用http interface來將http結(jié)果中的text/html的json數(shù)據(jù)轉(zhuǎn)為java對象了。文章來源地址http://www.zghlxwxcb.cn/news/detail-729907.html
到了這里,關(guān)于使用Http Interface客戶端解析text/html類型請求的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!