首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring的AsyncRestTemplate不能处理压缩内容,获取的是压缩内容而不是json对象

Spring的AsyncRestTemplate是Spring框架提供的一个异步的RESTful客户端工具类,用于发送HTTP请求并处理响应。然而,AsyncRestTemplate在默认配置下无法处理压缩内容,导致获取的响应是压缩后的内容而不是JSON对象。

压缩是一种常见的优化技术,通过减小传输数据的大小来提高网络传输效率。常见的压缩算法有Gzip和Deflate。当服务器返回的响应被压缩后,客户端需要解压缩才能获取原始的数据。

为了解决AsyncRestTemplate无法处理压缩内容的问题,可以通过自定义配置来实现。以下是一种可能的解决方案:

  1. 创建一个自定义的AsyncRestTemplate实例,并设置相关配置:
代码语言:java
复制
RestTemplate restTemplate = new RestTemplate();
AsyncRestTemplate asyncRestTemplate = new AsyncRestTemplate();
asyncRestTemplate.setRestTemplate(restTemplate);

// 创建一个HttpComponentsAsyncClientHttpRequestFactory,并设置相关配置
HttpComponentsAsyncClientHttpRequestFactory requestFactory = new HttpComponentsAsyncClientHttpRequestFactory();
requestFactory.setHttpClient(HttpClients.custom()
        .disableContentCompression()  // 禁用压缩
        .build());
asyncRestTemplate.setAsyncRequestFactory(requestFactory);
  1. 使用自定义的AsyncRestTemplate发送HTTP请求:
代码语言:java
复制
ListenableFuture<ResponseEntity<String>> future = asyncRestTemplate.getForEntity(url, String.class);
future.addCallback(new ListenableFutureCallback<ResponseEntity<String>>() {
    @Override
    public void onSuccess(ResponseEntity<String> result) {
        // 处理响应
        String json = result.getBody();
        // 解压缩数据
        // ...
    }

    @Override
    public void onFailure(Throwable ex) {
        // 处理异常
    }
});

通过以上方式,我们创建了一个自定义的AsyncRestTemplate实例,并禁用了压缩功能。在接收到响应后,可以手动解压缩获取原始的JSON数据。

对于压缩内容的处理,可以使用一些开源的压缩库,如Java的GzipInputStream和DeflaterInputStream,或者使用一些第三方的JSON库来解析压缩后的数据。

在腾讯云的产品中,可以使用腾讯云的云服务器(CVM)来部署应用程序,并使用腾讯云的对象存储(COS)来存储和管理文件。此外,腾讯云还提供了云数据库(CDB)、云函数(SCF)、人工智能服务(AI)等多种产品,可以根据具体需求选择适合的产品。

更多关于腾讯云产品的信息和介绍,可以参考腾讯云官方网站:腾讯云

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【SpringBoot WEB 系列】AsyncRestTemplate 之异步非阻塞网络请求介绍篇

[logo.jpg] 【SpringBoot WEB 系列】AsyncRestTemplate 之异步非阻塞网络请求介绍篇 AsyncRestTemplate 发起异步网络请求,由 Spring4.0...使用姿势 GET/POST 的访问姿势就不再赘述,有兴趣的小伙伴可以查看 RestTemplate 的使用博文:【WEB 系列】RestTemplate 基础用法小结 注意到不同的点在于返回的对象,RestTemplate...是直接返回实体;而AsyncRestTemplate返回的则是ListenerableFuture包装的结果,这个类属于 Spring 自定义对象,继承自 Future 体系,而 Future 是我们并发编程中用于获取异步结果的一个接口...ListenerableFuture的最大特点在于它可以绑定执行完成的监听器,就不需要通过 get 来阻塞获取结果了,一个简单的使用姿势如下, 分别演示正常返回,异常返回的回调 case(两者都不会阻塞主线程的执行哦...一灰灰 Blog 尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现 bug 或者有更好的建议,欢迎批评指正,不吝感激 下面一灰灰的个人博客,记录所有学习和工作中的博文,

6.1K31

WebClient 实践

传统的 RestTemplate 正好和其相对,它不是快速响应用户,它会阻塞代码,直到 http 请求返回响应才会继续运行下去,而 WebClient 则是异步执行,不阻塞代码。...所以,WebClient 的出现就是为了替换掉 RestTemplate 或者 AsyncRestTemplate,它能够以少量的线程数处理高并发的 Http 请求。...需要注意的是 webclient 方式,并不能提升程序的性能,它的价值在于用有限的资源提高系统的吞吐量和伸缩性。...两者返回类型不同,exchange 返回的内容更多,包含了响应头信息,Cookie,状态码等信息,它的类型本质上是 ClientResponse。...两者的区别在于 Mono 的响应结果,仅包含 0-1 个结果,而 Flux 可以包含多个结果。

5.3K20
  • Spring Boot + Gzip 压缩超大 JSON 对象,传输大小减少一半!

    业务背景 是这样的,业务背景是公司的内部系统有一个广告保存接口,需要 ADX 那边将投放的广告数据进行保存供后续使用。...传输数据大导致网络传输耗时 为了克服这几个问题团队中的老鸟产生一个想法: 请求广告保存接口时先将 JSON 对象字符串进行 GZIP 压缩,那请求时传入的就是压缩后的数据,而 GZIP 的压缩效率是很高的...,因此可以大大减小传输数据,而当数据到达广告保存接口前再将传来的数据进行解压缩,还原成 JSON 对象就完成了整个 GZIP 压缩数据的请求以及处理流程。...save") public Advertising saveProject(@RequestBody Advertising advertising) { log.info("获取内容...带上压缩后的 byte[] 写入的二进制文件 执行请求,服务端正确处理了请求并且请求 size 缩小了将近一半,效果还是很不错的。

    86720

    Springboot 之 Filter 实现超大响应 JSON 数据压缩

    简介 项目中,请求时发送超大 json 数据外;响应时也有可能返回超大 json 数据。...《Springboot 之 Filter 实现 Gzip 压缩超大 json 对象》实现了请求数据的 gzip 压缩。本篇通过 filter 实现对响应 json 数据的压缩。...* * 功能:对于返回给客户端的数据进行gzip压缩,提高响应速度 * 实现说明: * 要对response对象的输出数据进行gzip压缩,首先得拿到后面servlet(controller...)进行业务处理后往response对象里写入的数据 * 可以通过重写response对象,修改该对象内部的输出流,使该流写出数据时写出到给定的字节数组缓冲流当中, * 并在重写后的response...对象内部提供一个获取该字节数组缓冲流的方法,这样就可以截获响应数据 * 然后就可以对截获的响应数据通过Gzip输出流进行压缩输出即可; * 因为响应数据是gzip压缩格式,不是普通的文本格式所以需要通过

    1.7K20

    RPC框架:从原理到选型,一文带你搞懂RPC

    一个通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。...信息格式对其透明:我们知道在本地应用程序中,对于某个对象的调用需要传递一些参数,并且会返回一个调用结果。至于被调用的对象内部是如何使用这些参数,并计算出处理结果的,调用方是不需要关心的。...、消息头压缩、单 TCP 的多路复用、服务端推送等特性,这些特性使得 gRPC 在移动端设备上更加省电和节省网络流量; 序列化支持 PB(Protocol Buffer)和 JSON,PB 是一种语言无关的高性能序列化框架...: 二进制格式; TCompactProtocol: 压缩格式; TJSONProtocol: JSON格式; TSimpleJSONProtocol: 提供只写的JSON协议。...,那这些都不是问题;而 Spring Cloud 就像品牌机,在 Spring Source 的整合下,做了大量的兼容性测试,保证了机器拥有更高的稳定性,但是如果要在使用非原装组件外的东西,就需要对其基础有足够的了解

    27.6K914

    还没有秃头吗?你真的需要大牛来教你如何深入解析Ribbon源码了

    本章给大家讲解的内容是Ribbon源码解析。...● 初始化构造过程:获取@LoadBalanced注解标记RestTemplate或者AsyncRestTemplate,然后添加拦截器。...下面我们看一下Ribbon在Spring Cloud中是如何实现初始化的,首先看Ribbon的自动加载机制META-INF/spring.factories: 下面是RibbonAutoConfiguration...RestTemplate 继 承 了InterceptingHttpAccessor,而父类InterceptingHttpAccessor提供了获取及添加拦截器的方法,代码如下: InterceptingHttpAccessor...本文给大家讲解的内容是Ribbon源码解析 下篇文章给大家讲解的内容是微服务容错与隔离:隔离机制 觉得文章不错的朋友可以转发此文关注小编; 感谢大家的支持!

    39820

    2022就业季|Spring认证教你,如何使用 Spring 构建 REST 服务(三)

    到目前为止,您拥有一个基于 Web 服务来处理涉及员工数据的核心操作。但这还不足以让事情变得“RESTful”。漂亮的 URL/employees/3不是 REST。...换句话说,应用程序状态引擎(以及 API)不是由超文本驱动的,那么它就不能是 RESTful 并且不能是 REST API。时期。是否有一些损坏的手册需要修复?...CollectionModel是另一个 Spring HATEOAS 容器;它旨在封装资源集合,而不是像EntityModel之前那样封装单个资源实体。...不完全的。由于我们谈论的是 REST,它应该封装员工资源的集合。这就是为什么您获取所有员工,然后将它们转换为EntityModel对象列表的原因。(感谢 Java 8 流!)...不讲 HAL 的客户端可以在使用纯数据时忽略额外的位。使用 HAL 的客户可以浏览您授权的 API。但这并不是使用 Spring 构建真正的 RESTful 服务所需的唯一内容。......

    97830

    warp框架教程5-Filter系统中各个模块

    而限制请求体的大小,我们更多可能是通过反向代理服务器来进行限制,而不是使用 content_length_limit。...因此,我们通常需要使用的方法只剩下一个,那就是 json, 使用 json 方法可以提取json 反序列化后的内容,前提是我们需要安装 serde_json 来提供反序列化的能力。...压缩静态资源一般是在静态服务器层面进行的,因为静态资源在每次请求时都可以使用相同的压缩版本,而动态内容则根据每个请求的不同而生成,无法事先进行压缩。...cookie 模块 cookie 模块有两个方法,可以用于获取HTTP 请求中的携带的cookie,而不是操作响应中的 cookie。...(即使是动态生成文件,例如导出Excel,也应该将生成的文件存储在专门的文件系统中。)另外一点就是通常我们都是由静态服务器来处理静态文件的,而不是由动态服务器处理。

    35110

    【Spring Cloud Alibaba】(三)OpenFeign扩展点实战 + 源码详解

    ---- 前言 书接上文,我们掌握了Feign的基本使用、核心原理,以及Spring Cloud Alibaba如何快速整合Feign,真的太简单了!你是不是觉得这样就够了?...扩展点配置入手,然后进行OpenFeign扩展点配置实战,最后对OpenFeign是如何实现的进行了源码解读,内容很详细,Let’s go!...拦截器 拦截器是 非常有用的扩展点,是我们实现定制化需求的利器! 当我们需要统一处理Header、处理请求参数、处理响应结果时,就可以通过自定义拦截器处理。...POST请求,请求json,返回json,日志级别我改为了FULL,验证已经生效: 注意: 只有当Feign的Client 不是 okhttp3.OkHttpClient 的时候,压缩配置才会生效...我们先跟进下 注册流程,看看能不能找出扩展点配置是在哪里配置的! 1.

    1.8K50

    SpringMVC底层数据传输校验重传方案

    下面截取了一小段真实数据错误,在传输的json中,有一个数据项是departmentIdList,其内容时一个长整型数组。 ?...2.2 压缩传输数据 因为数据量大时容易发生,并且传输的都是普通文本,可以考虑对内容进行压缩后传输。普通文件压缩率也很高,压缩后内容长度能做到原数据10%以内,极大减少传输出错的几率。...3.3 DigestRestTemplate关键代码 对原json进行摘要,并同原始数据一起生成一个新的json对象。...md5摘要的json,是有摘要的数据进行校验,否则直接返回对象。...仍然失败后考虑抛异常,由发送端上层代码处理。 但这个代码有一个很明显的问题,接收端的任何错误如数据保存失败,都会导致发送端重传数据。下面读一下Spring的代码,看看是如何处理异常的。

    69020

    全网最新、最全的jQuery核心知识,你真的不想点开看看嘛?

    为什么使用 jQuery 它能够兼容市面上主流的浏览器, IE 和 FireFox,Google 浏览器 处理 AJAX,创建异步对象是不同的,而 jQuery 能够使用一种方式在不同的浏览器创建 AJAX...(Ctrl+S 直接进行保存到本地即可) 官网名称: 本地下载完的名称 开发时使用的是 :uncompressed 未压缩版 工作时使用的是 :compressed (min)压缩版 压缩版与未压缩版的区别...注意:以下设置的内容是书写代码时标签中的在网页显示文本内容,而不是设置网页上显示的内容。...注意:在代码中的写的等标签不会在页面中显示,而是会在页面中执行,但是获取的文本内容中含有这个 $(选择器).html():无参数调用方法,获取 DOM 数组第一个dom对象的在网页上显示的文本内容。...JQuery提供了 each() 方法用于遍历匹配的元素信 element: 数组的对象 : 这个是自定义的数组中的元素的标识符,这个元素可以是普通元素(直接获取)、json对象的value(直接获取)

    5.9K10

    JAVA 面试复习题

    在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作: HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息...3.在前面介绍压缩列表时,我们介绍过压缩列表是Redis为了节省内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构,相对于字典数据结构,压缩列表用于元素个数少、元素长度小的场景。...主要存放使用new关键字创建的对象。所有对象实例以及数组都要在堆上分配。垃圾收集器就是根据GC算法,收集堆上对象所占用的内存空间(收集的是对象占用的空间而不是对象本身)。...json对象可以直接使用 //ajax 取得数据是json字符串需要转换成json对象才可以使用。...是非synchronized,所以HashMap很快 HashMap可以接受null键和值,而Hashtable则不能(原因就是equlas()方法需要对象,因为HashMap是后出的API经过处理才可以

    7810

    重学SpringCloud系列二之服务注册与发现---上

    Feign设计原理源码解析 请求响应流程处理 根据Contract解析接口定义 HTTP内容格式编解码 拦截器 日志增强 Feign请求压缩与超时等配置 如何替换HTTP客户端实现 HTTPClient...、请求头、状态码等HTTP协议详细内容DELETEdelete发起HTTP的DELETE方法请求PUTput发起HTTP的PUT方法请求 这些方法的名称清楚地表明它们调用的是哪个HTTP方法,而名称中包含的第二部分表示返回的内容...而spring-cloud-starter-feign是专为Spring Cloud1.x服务。...报文编码/解码:比如:发送请求将参数转化为JSON,接受响应将JSON结果转化为返回值Bean。 拦截器:为了方便网络传输,通常将http协议内容压缩。...也就是说,我们在Spring MVC注解中常用的JSON、XML等数据格式,在接口定义中都可以被支持。 拦截器 此外Feign还为我们定义了拦截器,帮助我们实现请求响应内容的gzip压缩与解压缩。

    95120

    Redis大Key问题如何排查?如何解决?

    1.主要影响大 Key 问题造成的主要问题是让 Redis 服务阻塞,无法处理其他命令的响应(客户端可能因此出现请求超时的问题)。...例如,一个视频分享网站可能会将视频的详细描述、标签、点赞数、评论数等信息以 JSON 字符串的形式缓存为一个大 Key,方便快速获取视频相关的所有数据。...它会查出每种数据结构的最大 Key,但不能根据某个容量进行筛查。... 可以查看键值对象的编码类型,不同的编码类型可能暗示了键值的复杂程度和大小。...本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:并发编程、MySQL、Redis、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis

    40710

    直击痛点的一款 HTTP 客户端框架!

    HTTP 请求比较原始,基本上算是对网络传输层的一次浅层次的封装;有了 HttpURLConnection 对象后,就可以获取到输出流,然后把要发送的内容发送出去;再通过输入流读取到服务器端响应的内容;...Forest 本身是处理前端过程的框架,是对后端 HTTP API 框架的进一步封装。 ?...前端部分: 通过RPC方式去发送HTTP请求, 方便解耦 支持GET, HEAD, POST等所有请求方法 支持Spring和Springboot集成 JSON字符串到Java对象的自动化解析 XML文本到...尤其是当Gzip用来压缩存文本文件的时候效果尤为明显,大概能减少70%以上的文件大小。...} ) void asyncGet(String username, OnSuccess onSuccess); 异步请求时,通过 OnSuccess 回调函数来接受响应数据,而不是通过接口方法的返回值

    1.5K50

    Spring Boot 2.0-WebFlux framework

    简单来说,响应式编程是针对异步和事件驱动的非阻塞应用程序,并且需要少量线程来垂直缩放(即在 JVM 内)而不是水平(即通过集群)。...body内容反序列化的类(即如果body包含JSON,则由Jackson支持,或者如果是XML,则为JAXB)。...它将网络输入和输出公开为客户端 HttpRequest 和 ClientHttpResponse ,其中请求和响应的主体是 Flux 而不是 InputStream 和 OutputStream 。...application/stream+json : 一个 Flux 将作为一系列的 Account 元素处理,作为以新行分隔的单个JSON对象,并在每个元素之后显式刷新。...没有运行服务器的测试与来自Spring MVC的 MockMvc 相当,其中使用模拟请求和响应,而不是使用套接字通过网络连接。然而, WebTestClient 也可以针对正在运行的服务器执行测试。

    3.2K50

    RestTemplate的使用和原理你都烂熟于胸了吗?【享学Spring MVC】

    而不是源生js的)默认的提交方式也是它~ ?...若使用js原生的ajax,如果不显示的设置Content-Type,那么默认是text/plain,这时服务器就不知道怎么解析数据了,所以才只能通过获取原始数据流的方式来进行解析请求数据。...需要注意的是,RestTemplate是Spring 3.0就有了,但在Spring5.0后,Spring官方是推荐使用org.springframework.web.reactive.function.client.WebClient...在Spring3.2后提供了ParameterizedTypeReference来处理参数化类型—> 主要是为了处理List等的泛型 可以发现即使是exchange()方法,最终还是委托给execute...Spring设计了多个相关组件,提供钩子程序让我们可以干预到流程里面去,最常见的当然就是请求拦截器了,它在Ribbon负载均衡和Hystrix熔断器里面有很好的应用~ AsyncRestTemplate

    2.2K30

    feign 调用常见问题避坑指南!

    在用feign的日常中,难免会遇到些问题,那下面,我来总结下,我司在项目开发中遇到的问题。 虽说不是大问题,但至少是点经验分享,希望可以帮助到大家。...调用的时候启用了「压缩」 导致的。...,即JSON数组字符串,又会报参数类型不匹配的错误,要把参数改为对象数组或者List对象: @PostMapping(value = "/portal/core/appdata/install",consumes...一般来说当我们的业务需要处理的时间很大时,会出现这个问题。例如,上传excel文件。 那这里我们可以进行feign的超时时间设置。...提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。 获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。 文章有帮助的话,在看,转发吧。

    81420
    领券