最近在用 Spring Data Rest 写WebApi 遇到Put请求后报415 Mieda Type 的错误,GG了下 找到个解决办法 ,下面是针对Put请求的过滤。
1 public class HttpPutRestfulContentFilter extends OncePerRequestFilter { 2 3 private Charset charset = Charset.forName("UTF-8"); 4 private final String method="PUT"; 5 6 @Override 7 protected void doFilterInternal(final HttpServletRequest request, HttpServletResponse response, 8 FilterChain filterChain) throws ServletException, IOException { 9 10 if (this.method.equals(request.getMethod())) { 11 HttpInputMessage inputMessage = new ServletServerHttpRequest(request) { 12 @Override 13 public InputStream getBody() throws IOException { 14 return request.getInputStream(); 15 } 16 }; 17 18 HttpServletRequest wrapper = new HttpMethodRequestWrapper(request, this.method); 19 filterChain.doFilter(wrapper, response); 20 } 21 else { 22 filterChain.doFilter(request, response); 23 } 24 } 25 26 private static class HttpMethodRequestWrapper extends HttpServletRequestWrapper { 27 28 private final String method; 29 30 public HttpMethodRequestWrapper(HttpServletRequest request, String method) { 31 super(request); 32 this.method = method; 33 } 34 35 @Override 36 public String getMethod() { 37 return this.method; 38 } 39 } 40 }
需要在web.xml中添加这个自定义过滤
<!--解决使用PUT请求接收不到参数的问题 --> <filter> <filter-name>HttpMethodFilter</filter-name> <filter-class>org.tccsdk.core.code.filter.HttpPutRestfulContentFilter</filter-class> </filter> <filter-mapping> <filter-name>HttpMethodFilter</filter-name> <servlet-name>api</servlet-name> </filter-mapping> <!-- Spring child --> <servlet> <servlet-name>api</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>api</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>