Spring拦截器从Request中获取Json格式的数据

内容如题

1.创建取值类

 1 /**
 2  * MyRequestWrapper.java
 3  *
 4  * @screen
 5  * @author havery
 6  */
 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();
时间: 2024-10-26 22:43:16

Spring拦截器从Request中获取Json格式的数据的相关文章

C# 语言如何获取json格式的数据,不用javascript用c#实现。。。

{'state' : 1,'data':{'list':[{'id': 123, 'name': '诸葛天邪','level': 10,'country': 1,}]}} 比如我要获取里面的 id 该如何实现. 我有更好的答案 分享到: 按默认排序 | 按时间排序 2条回答 2012-06-25 20:15yzy_130 | 七级 最快回答 首先这个json串有几个错误的地方 第一个非常重要的错误,json串里面只能用双引号,不能用单引号,这个单双引号表示的意思不是引号内是字符串,而是json的

解决在IE中返回JSON格式的数据时提示下载的问题

如题,以ASP.NET MVC为例,解决办法如下: 控制器中: public JsonResult Test() { return Json(json, "text/html"); } 视图中: $.post("/controller/action/", function (data) { data = JSON.parse(data); }); 解决在IE中返回JSON格式的数据时提示下载的问题

Android Volley获取json格式的数据

为了让Android能够快速地访问网络和解析通用的数据格式Google专门推出了Volley库,用于Android系统的网络传输.volley库可以方便地获取远程服务器的图片.字符串.json对象和json对象数组等.当然,java本身也有获取json对象的方法,然而为了更好地适应移动互联网,google专门为其做了特殊的优化,因而应该尽可能地使用Volley库. Volley官方文档:https://developer.android.com/training/volley/index.htm

hive中导入json格式的数据(hive分区表)

hive中建立外部分区表,外部数据格式是json的如何导入呢? json格式的数据表不必含有分区字段,只需要在hdfs目录结构中体现出分区就可以了 This is all according to this guide: http://blog.cloudera.com/blog/2012/12/how-to-use-a-serde-in-apache-hive/ 1 hive> ADD JAR /home/hadoop/hive-serdes-1.0-SNAPSHOT.jar; 2 Added

在IE中MVC控制器中返回JSON格式的数据时提示下载

最近做项目时,视图中用jquery.form.js异步提交表单时,接收的是JSON格式的数据,但是奇怪的是在IE中提示下载文件,其他浏览器中一切正常,下载后,里面的内容就是在控制器中返回的数据.代码如下: 视图中js代码: $("#formDoUpload").ajaxSubmit({                    type: "POST",                    url: "/controller/action/",  

asp.net MVC控制器中返回JSON格式的数据时提示下载

Asp.net mvc在接收的是JSON格式的数据,但是奇怪的是在IE中提示下载文件,其他浏览器中一切正常,下载后,里面的内容就是在控制器中返回的数据.代码如下: 视图中js代码: $("#form").ajaxSubmit({                    type: "POST",                    url: "/controller/action/",                    datatype: &

spring拦截器中修改响应消息头

问题描述 前后端分离的项目,前端使用Vue,后端使用Spring MVC. 显然,需要解决浏览器跨域访问数据限制的问题,在此使用CROS协议解决. 由于该项目我在中期加入的,主要负责集成shiro框架到项目中作为权限管理组件,之前别的同事已经写好了部分接口,我负责写一部分新的接口. 之前同事解决跨域问题使用Spring提供的@CrossOrigin注解: @RequestMapping(value = "/list.do", method = RequestMethod.GET) @R

Spring拦截器

Spring的拦截器具备在web的前置和后置来处理各种请求. 拦截器接口-HandlerInterceptor 自定义的拦截器,需要继承HandlerInterceptor接口,并且实现HandlerInterceptor中提供的三个方法: 1. preHandle 方法会在请求处理前被调用.这个方法返回boolean值,如果返回true则继续往下执行,如果返回false则中断. 2. postHandle 方法会在请求处理后,继续调用. 3. afterCompletion 方法会在视图渲染之

spring 拦截器简介

spring 拦截器简介 常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等.2.权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面:3.性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录):4.通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提