1 新建类继承HttpServletRequestWrappe
import org.springframework.util.StreamUtils; 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.StandardCharsets; /** * @description :复制入参 **/ public class RequestNewWrapper extends HttpServletRequestWrapper { private final byte[] body; public RequestNewWrapper(HttpServletRequest request) throws IOException { super(request); body = StreamUtils.copyToByteArray(request.getInputStream()); } @Override public ServletInputStream getInputStream() { final ByteArrayInputStream bais = new ByteArrayInputStream(body); return new ServletInputStream() { @Override public int read() { return bais.read(); } @Override public boolean isFinished() { return false; } @Override public boolean isReady() { return false; } @Override public void setReadListener(ReadListener readListener) { } }; } @Override public BufferedReader getReader(){ return new BufferedReader(new InputStreamReader(getInputStream())); } public String getBody() { return new String(body, StandardCharsets.UTF_8); } }
2.过滤器中使用
@Component @Slf4j public class RequestFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) { response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "*"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); HttpServletRequest warpper = null; if (request.getContentType() != null && request.getContentType().contains("multipart/form-data")) { warpper = new StandardServletMultipartResolver().resolveMultipart(request); } else { warpper = new RequestNewWrapper(request); } R<?> result = null; try { byte[] body = StreamUtils.copyToByteArray(warpper.getInputStream()); System.out.println(new String(body, warpper.getCharacterEncoding())); } catch (Exception e) { log.error("error:{}", e.getMessage(), e); result = R.failed(0, "失败"); } } if (result != null) { response.setCharacterEncoding("UTF-8"); response.setContentType("application/json"); try (PrintWriter out = response.getWriter()) { out.write(JSON.toJSONString(result)); out.flush(); } catch (Exception e) { log.error("filter:{}", e.getMessage(), e); } return; } chain.doFilter(warpper, response); } }