• 自定义CustomHttpServletRequestWrapper 和CustomHttpServletResponseWrapper



    /**
    * @author Ly
    * @create 2020/8/17 17:51
    * @desc
    **/
    @Slf4j
    public class CustomHttpServletRequestWrapper extends HttpServletRequestWrapper {

    private final byte[] body;

    public CustomHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
    super(request);
    InputStream is = request.getInputStream();
    new HttpServletRequestWrapper(request);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte buff[] = new byte[ 1024 ];
    int read;
    while( ( read = is.read( buff ) ) > 0 ) {
    baos.write( buff, 0, read );
    }
    body = baos.toByteArray();

    }

    @Override
    public BufferedReader getReader() throws IOException {
    return new BufferedReader(new InputStreamReader(getInputStream()));
    }

    @Override
    public ServletInputStream getInputStream() throws IOException {
    final ByteArrayInputStream bais = new ByteArrayInputStream(body);
    return new ServletInputStream() {
    @Override
    public int read() throws IOException {
    return bais.read();
    }

    @Override
    public boolean isFinished() {
    return false;
    }

    @Override
    public boolean isReady() {
    return false;
    }

    @Override
    public void setReadListener(ReadListener readListener) {
    }

    };
    }


    public static String getBodyMap(ServletInputStream in) {
    String param= "";
    BufferedReader streamReader=null;
    try {
    streamReader = new BufferedReader( new InputStreamReader(in, "UTF-8"));
    StringBuilder responseStrBuilder = new StringBuilder();
    String inputStr;
    while ((inputStr = streamReader.readLine()) != null){
    responseStrBuilder.append(inputStr);
    }
    return responseStrBuilder.toString();
    } catch (Exception e) {
    log.error("获取请求体参数失败:",e);
    }finally{
    if(streamReader!=null){
    try {
    streamReader.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    log.error("关闭流失败:",e);
    }
    }

    }
    return null;
    }

    public Map<String,String> getAllHeaders(){
    Enumeration<String> headerNames = this.getHeaderNames();
    Map<String,String> headerMaps = Maps.newHashMap();
    while(headerNames.hasMoreElements()){
    String names = headerNames.nextElement();
    headerMaps.put(names,this.getHeader(names));
    }
    return headerMaps;
    }


    }
    =======================================================================================================================================================


    /**
    * @author Ly
    * @create 2020/8/24 15:52
    * @desc
    **/
    public class CustomHttpServletResponseWrapper extends HttpServletResponseWrapper {

    private CustomResponsePrintWriter writer;
    private ByteArrayOutputStream output;

    public CustomHttpServletResponseWrapper(HttpServletResponse httpServletResponse)
    {
    super(httpServletResponse);
    output = new ByteArrayOutputStream();
    writer = new CustomResponsePrintWriter(output);
    }

    @Override
    public ServletOutputStream getOutputStream() throws IOException {
    return new CustomServletOutputStream(output);
    }

    @Override
    public void finalize() throws Throwable{
    super.finalize();
    output.close();
    writer.close();
    }

    public String getContent() {
    try{
    return new String(this.getBytes(),"UTF-8");
    }
    catch(UnsupportedEncodingException e){
    return "UnsupportedEncoding";
    }
    }

    public byte[] getBytes(){
    byte[] bytes = output.toByteArray();
    if(null != writer) {
    writer.close();
    return bytes;
    }

    if(null != output) {
    try {
    output.flush();
    } catch(IOException e) {
    e.printStackTrace();
    }
    }
    return bytes;
    }

    @Override
    public PrintWriter getWriter() throws IOException{
    return writer;
    }

    class CustomServletOutputStream extends ServletOutputStream {
    private ByteArrayOutputStream ostream ;
    public CustomServletOutputStream(ByteArrayOutputStream ostream) {
    this.ostream = ostream;
    }
    @Override
    public void write(int b) throws IOException {
    // 将数据写到 stream 中
    ostream.write(b);
    }

    @Override
    public boolean isReady() {
    return false;
    }

    @Override
    public void setWriteListener(WriteListener writeListener) {

    }
    }

    private class CustomResponsePrintWriter extends PrintWriter
    {
    ByteArrayOutputStream output;

    public CustomResponsePrintWriter(ByteArrayOutputStream output){
    super(output);
    this.output = output;
    }

    public ByteArrayOutputStream getByteArrayOutputStream(){
    return output;
    }
    }
    }
  • 相关阅读:
    Dev GridControl 小结3
    一个web应用的诞生(9)--回到用户
    一个web应用的诞生(8)--博文发布
    一个web应用的诞生(7)--结构调整
    一个web应用的诞生(6)--用户账户
    一个web应用的诞生(5)--数据表单
    一个web应用的诞生(4)--数据存储
    一个web应用的诞生(3)--美化一下
    一个web应用的诞生(2)--使用模板
    一个web应用的诞生(1)--初识flask
  • 原文地址:https://www.cnblogs.com/ymqj520/p/14047051.html
Copyright © 2020-2023  润新知