首页
学习
活动
专区
工具
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 或者有更好建议,欢迎批评指正,不吝感激 下面一灰灰个人博客,记录所有学习和工作中博文,

6K31

WebClient 实践

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

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

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

    83520

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

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

    1.6K20

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

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

    26.4K813

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

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

    30810

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

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

    1.5K50

    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 服务所需唯一内容。......

    97430

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

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

    5.9K10

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

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

    68320

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

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

    39320

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

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

    92420

    直击痛点一款 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

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

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

    76020

    嗯,手搓一个TinyPng压缩图片WebpackPlugin也SoEasy啦

    除了这个安装问题,imagemin还存在另一个大问题,就是压缩质感损失得比较严重,图片体积越大越明显,压缩出来图片总有几张失真的,而且总体压缩不是很高。...工具投票 TinyJpg/TinyPng存在问题 上传下载全靠手动 只能压缩jpg和png 每次只能压缩20张 每张体积最大不能超过5M 可视化处理信息不是特别齐全 TinyJpg/TinyPng压缩原理...在过滤图片时,使用path模块判断文件类型是否为jpg和png,则继续处理,否则不处理。 数量限制 数量限制当然不能存在,万一项目里超过20张图片,那不是得分批处理,这个不能有。...Loader在webpack中扮演着转换器角色,用于转换模块源码,简单理解就是将文件转换成另外形式文件,本文主题压缩图片,jpg压缩后还是jpg,png压缩后还是png,在文件类型上来说还是没有变化...处理资源 通过compilation.assets获取全部打包文件对象,筛选出jpg和png,使用map()将单个图片数据映射为this.compressImg(file),再通过Promise.all

    94520

    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.1K50

    JAVA知识盲区整理

    不过在加载静态内部类过程中也会加载外部类 静态修饰过后一切物件都只与类相关,不与对象引用相关 静态变量,静态方法,静态块等都是类级别的属性,不是单纯对象属性。...与调用没有被static 修饰过变量和方法不同:一般变量和方法用当前对象引用(即this)来调用,静态方法和变量则不需要。从一个角度上来说,它们共享给所有对象不是一个角度私有。...,不能访问非静态方法和属性,但是普通内部类可以访问任意外部类成员变量和方法 静态内部类可以声明普通成员变量和方法,普通内部类不能声明static成员变量和方法 静态内部类可以单独初始化: Inner...,${xxx.version} 引用版本号爆红问题处理 ---- Spring Boot 中maven插件 spring-boot-maven-plugin Spring Boot Maven Plugin...-- getParentFile在解压文件时作用 getParentFile()作用是获得父目录 问题就是.mkdirs(); 这个方法只能生成一层一层文件夹,不能生成文件,而你file对象路径直接到文件那一层

    1.1K32

    万字长文Redis五种数据结构详解(理论+实战),建议收藏。

    ,因此「每次获取字符串长度都会遍历得到,时间复杂度O(n)」,Redis中获取字符串只要读取len值就可,时间复杂度变为O(1)。...(4)SDS二进制安全,除了可以储存字符串以外还可以储存二进制文件(如图片、音频,视频等文件二进制数据);c语言中字符串是以空字符串作为结束符,一些图片中含有结束符,因此不是二进制安全。...为了方便易懂,做了一个c语言字符串和SDS进行对比表格,如下所示: c语言字符串 SDS 获取长度时间复杂度为O(n) 获取长度时间复杂度为O(1) 不是二进制安全 二进制安全 只能保存字符串...(1)首先要把上传得图片进行编码,这里写了一个工具类把图片处理成了Base64得编码形式,具体得实现代码如下: /** * 将图片内容处理成Base64编码格式 * @param...压缩列表列表键和哈希键底层实现原理之一,「压缩列表并不是以某种压缩算法进行压缩存储数据,而是它表示一组连续内存空间使用,节省空间」,压缩列表内存结构图如下: ?

    6K20
    领券