zoukankan      html  css  js  c++  java
  • 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对象,从而调用我们重写的方法实

  • 相关阅读:
    PHP数组(数组正则表达式、数组、预定义数组)
    面向对象。OOP三大特征:封装,继承,多态。 这个讲的是【封存】
    uvalive 3938 "Ray, Pass me the dishes!" 线段树 区间合并
    LA4329 Ping pong 树状数组
    HDU 1257 最少拦截系统
    HDU 1260 Tickets
    codeforce 621D
    codeforce 621C Wet Shark and Flowers
    codeforce 621B Wet Shark and Bishops
    codeforce 621A Wet Shark and Odd and Even
  • 原文地址:https://www.cnblogs.com/panxuejun/p/7748206.html
Copyright © 2011-2022 走看看