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

it2022-05-09  36

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对象,从而调用我们重写的方法实

 

转载于:https://www.cnblogs.com/panxuejun/p/7748206.html


最新回复(0)