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對象,從而調用我們重寫的方法實

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM