在拦截器中读取request参数,解决在controller中无法二次读取的问题 - 路饭网
在 SpringBoot 中添加 Interceptor ,在拦截器中获取Controller 中的 @RequestBody 中的参数。
出现如下的错误:
I/O error while reading input message; nested exception is java.io.IOException: Stream closed
解决方法:添加 Filter 过滤器
import com.iot.qr.kettle.config.RequestWrapper;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@Component
public class RequestFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
ServletRequest requestWrapper = null;
if(servletRequest instanceof HttpServletRequest) {
requestWrapper = new RequestWrapper((HttpServletRequest) servletRequest);
}
if(requestWrapper == null) {
filterChain.doFilter(servletRequest, servletResponse);
} else {
filterChain.doFilter(requestWrapper, servletResponse);
}
}
@Override
public void destroy() {
}
}