这是“解决方案”
在SpringBoot中,如果添加了starter-
web模块,它将添加spring:webmvc,这似乎与JaxRS和Servlet过滤器不兼容。如果使用SpringBoot和Jersey,请确保webmvcjar不在类路径中。
Spring堆栈将使用Servlet的Request InputStream,并且管道中的每个向下拦截器/过滤器将一无所有。
这是一段有效的代码片段,可在Servlet过滤器中获取请求的有效负载
public MyFilter implements Filter{ @Override public final void doFilter( final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException { getRawFormPayload((HttpServletRequest) request); chain.doFilter(request, response); } protected String getRawFormPayload(HttpServletRequest request) { final int contentLength = request.getContentLength(); final StringBuilder payloadBuilder = new StringBuilder(contentLength); try { final InputStream inputStream = request.getInputStream(); final BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, request.getCharacterEncoding())); // Buffer should not be higher than the content-length of the request reader.mark(contentLength + 1); final char[] charBuffer = new char[contentLength + 1]; int bytesRead = -1; while ((bytesRead = reader.read(charBuffer)) > 0) { payloadBuilder.append(charBuffer, 0, bytesRead); } // Reset the buffer so the next Filter/Interceptor have unaltered InputStream reader.reset(); } catch (final IOException e) { this.LOG.error(e.getMessage(), e); } return payloadBuilder.toString(); }}


