Springboot Filter如何实现超大JSON数据压缩?
- 内容介绍
- 文章标签
- 相关推荐
本文共计672个文字,预计阅读时间需要3分钟。
目录+简介+pom.xml+引入依赖+对Response进行包装+定义GzipFilter对输出进行截断+注册GzipFilter+拦截器+定义Controller+定义Springboot+引导类+测试+简介+项目中,请求时发送超过巨大json数据;响应“
目录
- 简介
- pom.xml 引入依赖
- 对Response进行包装
- 定义GzipFilter对输出进行拦截
- 注册 GzipFilter 拦截器
- 定义 Controller
- 定义 Springboot 引导类
- 测试
简介
项目中,请求时发送超大 json 数据外;响应时也有可能返回超大 json数据。上一篇实现了请求数据的 gzip 压缩。本篇通过 filter 实现对响应 json 数据的压缩。
先了解一下以下两个概念:
- 请求头:
Accept-Encoding : gzip告诉服务器,该浏览器支持 gzip 压缩 - 响应头:
Content-Encoding : gzip告诉浏览器,输出信息使用了 gzip 进行压缩
pom.xml 引入依赖
<project xmlns="maven.apache.org/POM/4.0.0" xmlns:xsi="www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="maven.apache.org/POM/4.0.0 maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.olive</groupId> <artifactId>response-compression</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>response-compression</name> <url>maven.apache.org</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.14</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.14</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.9.0</version> </dependency> </dependencies> </project>
对Response进行包装
GzipResponseWrapper 类重新定义了输出流,拦截需要输出的数据,直接缓存到 ByteArrayOutputStream 中。
package com.olive.filter; import lombok.extern.slf4j.Slf4j; import javax.servlet.ServletOutputStream; import javax.servlet.WriteListener; import javax.servlet.127.0.0.1:8080/getArticle
到此这篇关于Springboot中的Filter实现超大响应JSON数据压缩的文章就介绍到这了,更多相关SpringbootJSON数据压缩内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!
本文共计672个文字,预计阅读时间需要3分钟。
目录+简介+pom.xml+引入依赖+对Response进行包装+定义GzipFilter对输出进行截断+注册GzipFilter+拦截器+定义Controller+定义Springboot+引导类+测试+简介+项目中,请求时发送超过巨大json数据;响应“
目录
- 简介
- pom.xml 引入依赖
- 对Response进行包装
- 定义GzipFilter对输出进行拦截
- 注册 GzipFilter 拦截器
- 定义 Controller
- 定义 Springboot 引导类
- 测试
简介
项目中,请求时发送超大 json 数据外;响应时也有可能返回超大 json数据。上一篇实现了请求数据的 gzip 压缩。本篇通过 filter 实现对响应 json 数据的压缩。
先了解一下以下两个概念:
- 请求头:
Accept-Encoding : gzip告诉服务器,该浏览器支持 gzip 压缩 - 响应头:
Content-Encoding : gzip告诉浏览器,输出信息使用了 gzip 进行压缩
pom.xml 引入依赖
<project xmlns="maven.apache.org/POM/4.0.0" xmlns:xsi="www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="maven.apache.org/POM/4.0.0 maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.olive</groupId> <artifactId>response-compression</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>response-compression</name> <url>maven.apache.org</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.14</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.14</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.9.0</version> </dependency> </dependencies> </project>
对Response进行包装
GzipResponseWrapper 类重新定义了输出流,拦截需要输出的数据,直接缓存到 ByteArrayOutputStream 中。
package com.olive.filter; import lombok.extern.slf4j.Slf4j; import javax.servlet.ServletOutputStream; import javax.servlet.WriteListener; import javax.servlet.127.0.0.1:8080/getArticle
到此这篇关于Springboot中的Filter实现超大响应JSON数据压缩的文章就介绍到这了,更多相关SpringbootJSON数据压缩内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

