zoukankan      html  css  js  c++  java
  • springboot request 只能读取一次

    一,工具类

    HttpUtil

    package com.tenyears.common.utils;
     
    import javax.servlet.ServletRequest;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.nio.charset.Charset;
     
    /**
     * @description :
     * @auther Tyler
     * @date 2021/8/31
     */
     
    public class HttpUtil {
        /**
         * 获取请求Body
         *
         * @param request
         * @return
         */
        public static String getBodyString(ServletRequest request) {
            StringBuilder sb = new StringBuilder();
            InputStream inputStream = null;
            BufferedReader reader = null;
            try {
                inputStream = request.getInputStream();
                reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
                String line = "";
                while ((line = reader.readLine()) != null) {
                    sb.append(line);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (inputStream != null) {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return sb.toString();
        }
    }
     

    二,BodyReaderHttpServletRequestWrapper  扩展类

    package com.tenyears.extend;
     
    import com.tenyears.common.utils.HttpUtil;
     
    import javax.servlet.ReadListener;
    import javax.servlet.ServletInputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletRequestWrapper;
    import java.io.BufferedReader;
    import java.io.ByteArrayInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.nio.charset.Charset;
     
    /**
     * @description :
     * @auther Tyler
     * @date 2021/8/31
     */
     
    public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper {
     
        private final byte[] body;
     
        public BodyReaderHttpServletRequestWrapper(HttpServletRequest request) throws Exception {
            super(request);
            body = HttpUtil.getBodyString(request).getBytes(Charset.forName("UTF-8"));
        }
     
        @Override
        public BufferedReader getReader() throws IOException {
            return new BufferedReader(new InputStreamReader(getInputStream()));
        }
     
        @Override
        public ServletInputStream getInputStream() throws IOException {
     
            final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body);
     
            return new ServletInputStream() {
     
                @Override
                public int read() throws IOException {
                    return byteArrayInputStream.read();
                }
     
                @Override
                public boolean isFinished() {
                    return false;
                }
     
                @Override
                public boolean isReady() {
                    return false;
                }
     
                @Override
                public void setReadListener(ReadListener readListener) {
     
                }
            };
        }
    }

    三,使用

    @Autowired
    HttpServletRequest request;
     
    private void IdempotentCheck() throws Exception {
            // 防止流读取一次后就没有了, 因此须要将流继续写出去
            ServletRequest requestWrapper = new BodyReaderHttpServletRequestWrapper(request);
     
            String body = HttpUtil.getBodyString(requestWrapper);
            
     
        }
  • 相关阅读:
    【转载】Java嵌入Pig编程
    【转载】Pig语法进阶
    【转载】各种SQL在PIG中实现
    机器学习简易入门(三)
    机器学习简易入门(一)
    在Centos7上安装漏洞扫描软件Nessus
    R简易入门(二)
    R简易入门(一)
    Mysql主从同步(复制)
    Mysql备份与恢复
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/15209918.html
Copyright © 2011-2022 走看看