使用Http Interface客户端解析text/html类型请求

这篇具有很好参考价值的文章主要介绍了使用Http Interface客户端解析text/html类型请求。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言
Spring6和Spring Boot3的正式发布也有一段时间了,最低支持的java版本也是直接跳到了17。而且最近java21也出来了,作为一个javaer,你不会还在坚守java8吧?

Http Interface是Spring6新推出的一个声明式http客户端,写法有点像Retrofit。最近也是在一个新的项目里引入了Http Interface,但是目前相关资料还是比较少的,碰到一些问题还是会花费些时间精力。

问题

这次遇到的问题是:使用Http Interface请求一个接口,然后用到其中的返回结果做json解析。这个http返回的content-type是text/html; charset=utf-8,我所使用的json解析工具是jackson。但是对其中的内容转java对象时却一直失败,下面是解决方案。

解决

问题的原因实际上是Http interface中的jackson解码器不支持解码text/html的类型,因此我们只要让它做到支持就可以了。

首先在构造WebClient的时候使用.codecs()方法来添加自定义转换器:

@Configuration
public class RestClientConfig {
    
    @Bean
    public ChatCompletionDMClient chatCompletionDMClient() {
        WebClient webClient = WebClient.builder()
                .baseUrl(BASE_URL)
                // 添加自定义转换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"

@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);

这样就可以实现使用http interface来将http结果中的text/html的json数据转为java对象了。文章来源地址https://www.toymoban.com/news/detail-729907.html

到了这里,关于使用Http Interface客户端解析text/html类型请求的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何使用Laravel的HTTP客户端与外部API交互

    Laravel使API交互对新的和有经验的Web开发人员来说都是轻而易举的。Larvel的HTTP客户端是建立在PHP的Guzzle HTTP客户端之上,让开发者在进行HTTP请求时有更顺畅的体验。它的主要功能包括认证, 路由, 和有效的对象关系映射(ORM). 本文将探讨如何使用Laravel的HTTP客户端来进行请求, 调

    2024年01月21日
    浏览(67)
  • HTTP Header定制,客户端使用Request,服务器端使用Response

     在服务器端通过request.getHeaders()是无效的,只能使用response.getHeaders()。  

    2024年02月16日
    浏览(43)
  • http客户端Fegin

    代码可读性差,编程体验不统一 参数复杂URL难以维护 Feign是声明式的http客户端(只需要将发http请求的信息写出即可)  主要基于SpringMvc的注解来声明远程调用的信息:  步骤: 1.引入依赖 2.添加EnableFeignClients注解 3.编写FeignClient接口 4.使用FeigClient中定义的方法代替RestTempl

    2024年02月09日
    浏览(31)
  • 【WebClient】客户端HTTP 超时配置

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 1、项目升级到Springboot3,使用WebFlux自带的WebClient作为HTTP客户端 2、接口类客户端方式调用外部服务,默认超时5S 3、需根据业务动态修改超时时间,如60S 报错如下: java.lang.IllegalStateException: Timeout on bl

    2024年02月12日
    浏览(32)
  • 微服务——http客户端Feign

    目录 Restemplate方式调用存在的问题 Feign的介绍 基于Feign远程调用 Feign自定义配置 修改日志方式一(基于配置文件) 修改日志方式二(基于java代码) Feign的性能优化 连接池使用方法  Feign_最佳实践分析   方式一: 方式二  实现Feign最佳实践(方式二)  两种解决方案 就像早期的事务

    2024年02月15日
    浏览(32)
  • 【libevent】http客户端3:简单封装

    LibEventHttp

    2024年02月15日
    浏览(38)
  • 【六、http】go的http的客户端重定向

    重定向过程 :客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器–》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任

    2024年02月05日
    浏览(35)
  • Forest声明式HTTP客户端框架漫谈

    Forest 是一款声明式的 Java 开源 HTTP 框架,相比它的前辈 Httpclient 和 OkHttp 更简明易懂、也更容易维护,使用过程中非常丝滑故想分享给更多的朋友,此处我们进行简单的介绍和使用说明。 Forest为声明式HTTP客户端框架。将繁复的 HTTP 请求细节封装成 Java 接口 + 注解的形式,不

    2024年02月09日
    浏览(33)
  • Java常用的Http client客户端

    Apache HttpClient是一个开源的Java HTTP客户端库,具有丰富的功能集,包括自动重试、连接管理、cookie管理、代理支持和认证等。HttpClient已成为Java开发中广泛使用的HTTP客户端之一。 OkHttp是Square公司开发的一个高性能的HTTP客户端库,具有自动重试、连接池、交互式调试和压缩支持

    2024年02月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包