Spring拦截器从Request中获取Json格式的数据
7 package com.newpp.core.interceptor;
8
9 import java.io.BufferedReader;
10 import java.io.ByteArrayInputStream;
11 import java.io.IOException;
12 import java.io.InputStream;
13 import java.io.InputStreamReader;
14
15 import javax.servlet.ServletInputStream;
16 import javax.servlet.http.HttpServletRequest;
17 import javax.servlet.http.HttpServletRequestWrapper;
18
19 /**
20 * MyRequestWrapper.
21 *
22 * @author havery
23 */
24 public class MyRequestWrapper extends HttpServletRequestWrapper {
25 private final String body;
26
27 public MyRequestWrapper(HttpServletRequest request) throws IOException {
28 super(request);
29 StringBuilder stringBuilder = new StringBuilder();
30 BufferedReader bufferedReader = null;
31 try {
32 InputStream inputStream = request.getInputStream();
33 if (inputStream != null) {
34 bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
35 char[] charBuffer = new char[128];
36 int bytesRead = -1;
37 while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
38 stringBuilder.append(charBuffer, 0, bytesRead);
39 }
40 } else {
41 stringBuilder.append("");
42 }
43 } catch (IOException ex) {
44 throw ex;
45 } finally {
46 if (bufferedReader != null) {
47 try {
48 bufferedReader.close();
49 } catch (IOException ex) {
50 throw ex;
51 }
52 }
53 }
54 body = stringBuilder.toString();
55 }
56
57 @Override
58 public ServletInputStream getInputStream() throws IOException {
59 final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());
60 ServletInputStream servletInputStream = new ServletInputStream() {
61 public int read() throws IOException {
62 return byteArrayInputStream.read();
63 }
64 };
65 return servletInputStream;
66 }
67
68 @Override
69 public BufferedReader getReader() throws IOException {
70 return new BufferedReader(new InputStreamReader(this.getInputStream()));
71 }
72
73 public String getBody() {
74 return this.body;
75 }
76 }

2.取值
MyRequestWrapper myRequestWrapper = new MyRequestWrapper((HttpServletRequest) request);
String body = myRequestWrapper.getBody();
2、继承HttpServletRequestWrapper 和HttpServletResponse 两个类对 getParameter(String str) 和getWrite()两方法进行重写,而方法中实现我们想要的操作
3、使用Filter过滤器,我们知道Filter是在请求到达servlet之前和servlet响应信息到达浏览器之前进行两次拦截,而就在到达server之前我们将FilterChain的doFilter(request,reponse)方法的request参数替换为我们装饰后的request而我们又重写的getParameter(String str)方法,之后调用的就是这个方法,因此也就完成了
请求参数的过滤和修改
4、响应和请求其实是一样的,也是替换了Response对象,从而调用我们重写的方法实
Spring拦截器从Request中获取Json格式的数据的更多相关文章
- Android Volley获取json格式的数据
为了让Android能够快速地访问网络和解析通用的数据格式Google专门推出了Volley库,用于Android系统的网络传输.volley库可以方便地获取远程服务器的图片.字符串.json对象和j ...
- asp.net MVC控制器中返回JSON格式的数据时提示下载
Asp.net mvc在接收的是JSON格式的数据,但是奇怪的是在IE中提示下载文件,其他浏览器中一切正常,下载后,里面的内容就是在控制器中返回的数据.代码如下: 视图中js代码: $("# ...
- hive中导入json格式的数据(hive分区表)
hive中建立外部分区表,外部数据格式是json的如何导入呢? json格式的数据表不必含有分区字段,只需要在hdfs目录结构中体现出分区就可以了 This is all according to t ...
- 在IE中MVC控制器中返回JSON格式的数据时提示下载
最近做项目时,视图中用jquery.form.js异步提交表单时,接收的是JSON格式的数据,但是奇怪的是在IE中提示下载文件,其他浏览器中一切正常,下载后,里面的内容就是在控制器中返回的数据.代码如 ...
- 【spring boot】在自定义拦截器中从request中获取json字符串
又这样的需求,需要在自定义的拦截器中获取request中的数据,想获取到的是JSON字符串 那需要在拦截器中写这样一个方法 public static String getOpenApiRequest ...
- 获取json格式的数据变成了undefined!?
今天在做一个简单的登陆功能时,当一切准备就绪,点击登陆时,什么都没发生..然后开始debug,打断点调试,然后发现了这个.向页面传递数据flag是true代表该用户的账号密码验证码等信息正确可以登录, ...
- C# 语言如何获取json格式的数据,不用javascript用c#实现。。。
{'state' : 1,'data':{'list':[{'id': 123, 'name': '诸葛天邪','level': 10,'country': 1,}]}} 比如我要获取里面的 id 该 ...
- 解决在IE中返回JSON格式的数据时提示下载的问题
如题,以ASP.NET MVC为例,解决办法如下: 控制器中: public JsonResult Test() { return Json(json, "text/html"); ...
- ssm框架中处理json格式的数据步骤
1.导架包 <!--处理json--> <dependency> <groupId>com.fasterxml.jackson.core</groupId&g ...
随机推荐
- Clover KextsToPatch 使用方法 2015.10.21
Clover KextsToPatch 使用方法 2015.10.21 前些天,因为 Thinkpad X230 BIOS 白名单限制,给她换了一块 ar9285 无线网卡,只是因为这块网卡正好可 ...
- VUE2中axios的使用方法
一,安装 npm install axios 二,在http.js中引入 import axios from 'axios'; 三,定义http request 拦截器,添加数据请求公用信息 axio ...
- CF547D Mike and Fish 建图
题意: 有点长→CF547DMike and Fish. 分析: 其实也没什么好分析的,我这也是看的题解. (不过,那篇题解好像文字的代码不太对劲) 这里直接说做法,正确性自证: 对输入的,将横.纵坐 ...
- 转: opencv4.0.0 +opencv_contrib在vs2015中编译
https://blog.csdn.net/baidu_40691432/article/details/84957737
- mysql5.7.22-log 修改远程访问
正常的设置账号远程访问依然访问不了的情况,可以看一下服务器 my.cnf配置文件下 [client] #password = your_password 把上面的#去掉就行了.
- STM32F407 I2C 个人笔记
源代码;https://github.com/YuQiao0303/STM32F407-Examples/tree/master/24.IIC 概述 I2C (IIC, Inter-Integrate ...
- 检测SQLserver数据库链接是否正常
select * From [数据库链接名].master.dbo.sysdatabases where name='数据库名' and status<>512
- 2011 Michigan Invitational Programming Contest
Crossings Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463 Description ...
- TMOS_Order_of_Operations_v0.1
- BZOJ 2140 稳定婚姻 ——二分图
论二分图的可行边与必须边. 考虑用dinic增广之后的图,一些是必要的割边,一些是可行的割边. 我们首先求出一组可行的最大匹配,那么这些变都是可行的. 然后我们求一遍强连通分量. 如果 scc[u]! ...