Regardless of whether it is post submission or get submission, whether the parameters are placed in url or form-data, or placed in the request body in the form of json, they can be obtained normally without affecting the use of the controller. Here to get the parameter name as an example
- filter
@Component
public class MyFilter 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;
String header = ((HttpServletRequest) servletRequest).getHeader("Content-Type");
if(header != null && "multipart/form-data".equals(header.split(";")[0])) {
}else {
requestWrapper = new MyHttpServletRequestWrapper((HttpServletRequest) servletRequest);
}
if (requestWrapper == null) {
filterChain.doFilter(servletRequest, servletResponse);
}else {
filterChain.doFilter(requestWrapper,servletResponse);
}
}
@Override
public void destroy() {
}
}
- Custom request wrapper class
public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper {
private final String body;
public MyHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
super(request);
InputStream is = null;
StringBuilder sb = null;
try {
is = request.getInputStream();
sb = new StringBuilder();
byte[] b = new byte[4096];
for (int n ; (n = is.read(b)) != -1;)
{
sb.append(new String(b, 0, n));
}
} finally {
if(is != null) {
is.close();
}
}
body = sb.toString();
}
@Override
public ServletInputStream getInputStream() throws IOException {
final ByteArrayInputStream bais = new ByteArrayInputStream(body.getBytes());
return new ServletInputStream() {
@Override
public boolean isFinished() {
return false;
}
@Override
public boolean isReady() {
return false;
}
@Override
public void setReadListener(ReadListener readListener) {
}
@Override
public int read() throws IOException {
return bais.read();
}
@Override
public void close() throws IOException {
System.out.println(1);
bais.close();
}
};
}
public String getBody() {
return body;
}
}
- Interceptor
@Component
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String method = request.getMethod();
String header = request.getHeader("Content-Type");
System.out.println(header);
if("GET".equals(method) || "multipart/form-data".equals(header.split(";")[0])) {
String name = request.getParameter("name");
System.out.println(name);
}else if("POST".equals(method)) {
MyHttpServletRequestWrapper requestWrapper = new MyHttpServletRequestWrapper(request);
String body = requestWrapper.getBody();
Map map = JSON.parseObject(body, Map.class);
Object name = map.get("name");
System.out.println(name);
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
- Interceptor configuration
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Autowired
MyInterceptor myInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor).addPathPatterns("/**");
}
}