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

  • 相关阅读:
    工程的创建
    scrapy框架简介和基础应用
    移动端数据爬取
    Python网络爬虫之图片懒加载技术、selenium和PhantomJS
    验证码处理
    Python网络爬虫之requests模块
    Python网络爬虫之三种数据解析方式
    Python网络爬虫之requests模块
    scrapy
    基于XML的AOP配置
  • 原文地址:https://www.cnblogs.com/panxuejun/p/7748206.html
Copyright © 2020-2023  润新知