1.新加类GzipRequestWrapper 继承HttpServletRequestWrapper类

public class GzipRequestWrapper  extends HttpServletRequestWrapper{

    private HttpServletRequest request;
private static final Logger LOGGER = LoggerFactory.getLogger(GzipRequestWrapper.class); public GzipRequestWrapper(HttpServletRequest request) {
super(request);
this.request = request;
} @Override
public ServletInputStream getInputStream() throws IOException { ServletInputStream stream = request.getInputStream(); String contentEncoding = request.getHeader("Content-Encoding");
// 如果对内容进行了压缩,则解压
if (null != contentEncoding && contentEncoding.indexOf("gzip") != -1) {
try {
final GZIPInputStream gzipInputStream = new GZIPInputStream(
stream); ServletInputStream newStream = new ServletInputStream() { @Override
public int read() throws IOException {
return gzipInputStream.read();
} @Override
public boolean isFinished() {
return false;
} @Override
public boolean isReady() {
return false;
} @Override
public void setReadListener(ReadListener arg0) {
// TODO Auto-generated method stub }
};
return newStream;
} catch (Exception e) {
LOGGER.debug("ungzip content fail.", e);
}
}
return stream;
} }

2.新加FilterGzip 实现 Filter(注意使用注解)

@WebFilter(filterName="AccessFilter",urlPatterns="/")
public class FilterGzip implements Filter { @Override
public void destroy() { } @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException { System.out.println("filter"); chain.doFilter(new GzipRequestWrapper((HttpServletRequest) request),
response); } @Override
public void init(FilterConfig arg0) throws ServletException { } }

3.在启动类添加

@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
FilterGzip httpBasicFilter = new FilterGzip();
registrationBean.setFilter(httpBasicFilter);
List<String> urlPatterns = new ArrayList<String>();
urlPatterns.add("/*");
registrationBean.setUrlPatterns(urlPatterns);
return registrationBean;
}

4.使用

@RequestMapping(value="/info")
public String receive(HttpServletRequest req){ StringBuilder sb = null;
String json = null;
try {
ServletInputStream inputStream = req.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
sb = new StringBuilder(); String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
json = URLEncoder.encode(sb.toString(), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("sb ----> " + sb.toString());
if(sb != null){
logger.info("**** 接收成功1条 ****");
}
MultiValueMap<String, String> paramMap = new LinkedMultiValueMap<>();
paramMap.add("jsonStr", json);
restTemplate.postForObject("http://SERVICE-DATA/pretreat", paramMap, String.class); logger.info("#### 传输 成功!####"); return "ok";
}

spring boot 过滤器实现接收 压缩数据 并解压的更多相关文章

  1. 接口接收gzip压缩数据并解压

    asp.net 接收前端gzip 压缩后的数据,接收端需要进行解压 public string GetResponseBody(HttpWebResponse response) { string r ...

  2. 浏览器提示ERR_CONTENT_DECODING_FAILED,Gzip压缩数据无法解压

    最近在页面上有个显示数据表格的功能,数据由后台传给前台JS表格插件.数据格式为JSON 由于数据量很大,就想到用GZIP压缩以后传给前台.压缩前,某个表格的数据量达到3M多,用GZIP压缩后就200K ...

  3. 在Spring Boot中加载初始化数据

    文章目录 依赖条件 data.sql文件 schema.sql 文件 @sql注解 @SqlConfig 注解 在Spring Boot中加载初始化数据 在Spring Boot中,Spring Bo ...

  4. Spring Boot 启动(二) 配置详解

    Spring Boot 启动(二) 配置详解 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring Boot 配置 ...

  5. SpringMVC上传压缩文件,解压文件,并检测上传文件中是否有index.html

    SpringMVC上传压缩文件,解压文件,并检测上传文件中是否有index.html 说明: 1.环境:SpringMVC+Spring+Tomcat7+JDK1.7 2.支持 zip和rar格式的压 ...

  6. linux下分卷压缩,合并解压的3种方法

    我们上传东西的时候,由于文件过大而不能上传,或者不给上传,最明显的就是发邮件了,附件最大5M,有的10M.如果超过了就郁闷了.这个时候,如果能把压缩的东西,分割开来就比较爽了,windows下面我想大 ...

  7. 对称加密之AES、压缩解压以及压缩加密解密解压综合实战

    AES 压缩解压 压缩加密解密解压 对称加密: 就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密.密钥是控制加密及解密过程的指令.算法是一组规则,规定如何进行加密和解密.   因此加密的安 ...

  8. PHP zip压缩文件及解压

    PHP zip压缩文件及解压 利用ZipArchive 类实现 只有有函数.界面大家自己写 ZipArchive(PHP 5.3 + 已自带不需要安装dll) /** * 文件解压 * @param ...

  9. innobackup stream 压缩备份,解压后的qp文件

    是用innobackup stream 压缩备份,解压后很多文件还是qp格式的压缩文件,需要再解压. 备份: [root@ ~]# /usr/bin/innobackupex --defaults-f ...

随机推荐

  1. HDU 1077 Catching Fish(用单位圆尽可能围住多的点)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1077 Catching Fish Time Limit: 10000/5000 MS (Java/Oth ...

  2. php常见的几种排序以及二分法查找

    <?php 1.插入排序 思想: 每次将一个待排序的数据元素插入到前面已经排好序的数列中,使数列依然有序,知道待排序数据元素全部插入完为止. 示例: [初始关键字] [49] 38 65 97 ...

  3. 使用Mosh,本地Mac locale与Remote Debian locale不一致的问题

    事实上, 你并不需要安装语言包, 只需安装中文字体并将/etc/locale.gen 中zh_CN.UTF-8 前的注释符号去掉, 执行sudo locale-gen 然后重启即可.

  4. code First 四

    先从现有数据库获取代码:  我们创建模型的时候选择Code First就可以了 public ModelStudent() : base("name=ModelStudent") ...

  5. ImportError: No module named lmdb

    why? 具体原因没有查清楚.安装caffe时,按照要求安装了包,caffe用的好好的,而且我也用打好包的lmdb跑了程序了.可我今天想看一下我的打包数据是不是漏掉数据了,直接开个python窗口,i ...

  6. java类的初始化程序块以及被实例化时候的执行顺序

    初始化块:在类实例化过程中初始化执行顺序是先执行静态初始化块,然后执行普通初始化块,最后执行构造函数,而且静态初始化只在第一次被实例化时执行且只执行一次.public class HelloWorld ...

  7. [JSOI2008]最大数(线段树基础)

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: L 不超过当前数列的长度.(L > ...

  8. 2 3 5 7的倍数 (51Nod - 1284)[容斥定理]

    20180604 给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数. 例如N = 10,只有1不是2 3 5 7的倍数. Input 输入1个数N(1 <= N <= 10^1 ...

  9. 使用NPOI快速导出导入Excel

    这两天做项目需要导入导出EXCEL,是基于NPOI的封装,设计思路是使用DataTable,然后导出一个和DataTable一模一样的Excel表出来 github地址:https://github. ...

  10. Nginx反向代理 Laravel获取真实IP地址(PHP)

    使用VUE前后端分离开发 后端使用Laravel  想要获取到用户的真实IP地址 因为分离开发不同源跨域问题 所以只能进行前端Nginx反向代理 location /api { rewrite ^/a ...