栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

统一500异常( 非抛出的异常)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

统一500异常( 非抛出的异常)

%DATE% %TIME%

2021年03月11日 16:21

这里的处理那些没有抛出的500错误

定义一个过滤器,并把级别调到最高
package com.fedtech.common.filter.response;

import com.fedtech.common.util.result.R;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class ResponseFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void destroy() {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
     throws IOException, ServletException {

 ResponseWrapper responseWrapper = new ResponseWrapper((HttpServletResponse) servletResponse);
 filterChain.doFilter(servletRequest, responseWrapper);
 String contentType = responseWrapper.getContentType();
 byte[] content = responseWrapper.getResponseData();
 String str = "";
 if (StringUtils.isNotBlank(contentType) && (contentType.contains(MediaType.APPLICATION_JSON_VALUE) || contentType.contains(MediaType.TEXT_HTML_VALUE))) {
     str = new String(content);
     HttpServletResponse response = (HttpServletResponse) servletResponse;
     if (response.getStatus() != 200) {
  if (StringUtils.containsAny(str, ""status":"false"")) {
      writeResponse(response, response.getStatus(), str);
  } else {
      writeResponse(response, response.getStatus(), R.failedWithJsonData(str).toJson());
  }
     } else {
  if (StringUtils.containsAny(str, ""status":"true"")) {
      writeResponse(response, response.getStatus(), str);
  } else {
      writeResponse(response, response.getStatus(), R.successWithJsonData(str).toJson());
  }
     }
 }
    }

    private static void writeResponse(HttpServletResponse response, int status, String json) {
 try {
     response.setHeader("Access-Control-Allow-Origin", "*");
     response.setHeader("Access-Control-Allow-Methods", "*");
     response.setContentType("application/json;charset=UTF-8");
     response.setStatus(status);
     response.getWriter().write(json);
 } catch (IOException e) {
     e.printStackTrace();
 }
    }
}
统一响应处理
package com.fedtech.common.filter.response;

import com.fedtech.common.util.result.R;
import org.apache.commons.lang3.StringUtils;

import javax.servlet.ServletOutputStream;
import javax.servlet.WriteListener;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.*;

public class ResponseWrapper extends HttpServletResponseWrapper {
    private ByteArrayOutputStream buffer = null;
    private ServletOutputStream out = null;
    private PrintWriter writer = null;

    ResponseWrapper(HttpServletResponse resp) throws IOException {
 super(resp);
 buffer = new ByteArrayOutputStream();// 真正存储数据的流
 out = new WapperedOutputStream(buffer);
 writer = new PrintWriter(new OutputStreamWriter(buffer));
    }

    @Override
    public ServletOutputStream getOutputStream() throws IOException {
 return out;
    }

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

    @Override
    public void flushBuffer() throws IOException {
 if (out != null) {
     out.flush();
 }
 if (writer != null) {
     writer.flush();
 }
    }

    @Override
    public void reset() {
 buffer.reset();
    }

    byte[] getResponseData() throws IOException {
 flushBuffer();
 if (StringUtils.contains(buffer.toString(), ""data":") && StringUtils.contains(buffer.toString(), ""code":")
  && StringUtils.contains(buffer.toString(), ""status":")) {
     return buffer.toByteArray();
 }
 ByteArrayOutputStream stream = new ByteArrayOutputStream();
 stream.write(R.successWithJsonData(buffer.toString()).toJson().getBytes());
 return stream.toByteArray();
    }

    public String getContent() throws IOException {
 flushBuffer();
 if (StringUtils.contains(buffer.toString(), ""data":") && StringUtils.contains(buffer.toString(), ""code":")
  && StringUtils.contains(buffer.toString(), ""status":")) {
     return buffer.toString();
 }
 ByteArrayOutputStream stream = new ByteArrayOutputStream();
 stream.write(R.successWithJsonData(buffer.toString()).toJson().getBytes());
 return stream.toString();
    }


    private class WapperedOutputStream extends ServletOutputStream {
 private ByteArrayOutputStream bos = null;

 WapperedOutputStream(ByteArrayOutputStream stream) throws IOException {
     bos = stream;
 }

 @Override
 public void write(int b) throws IOException {
     bos.write(b);
 }

 @Override
 public void write(byte[] b) throws IOException {
     bos.write(b, 0, b.length);
 }

 @Override
 public void write(byte[] b, int off, int len) throws IOException {
     bos.write(b, off, len);
 }

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

 @Override
 public void setWriteListener(WriteListener writeListener) {

 }
    }
}

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号