Java写一个过滤器打印请求报文,包含get传参,post传参包含json和表单,然后对响应报文返回的内容
时间: 2024-09-26 08:08:17 浏览: 58
在Java中,你可以使用Spring Web框架中的Filter机制来捕获并处理HTTP请求和响应。以下是一个简单的例子,展示如何创建一个`Filter`来打印GET和POST请求的参数:
```java
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class RequestLoggingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
// 打印GET参数
if (httpRequest.getMethod().equals("GET")) {
System.out.println("---------- GET REQUEST ----------");
for (String param : httpRequest.getParameterMap().keySet()) {
System.out.println(param + "=" + httpRequest.getParameter(param));
}
System.out.println("---------------------------------\n");
}
// 打印POST请求的JSON内容(假设Content-Type是application/json)
else if (httpRequest.getMethod().equals("POST") && "application/json".equalsIgnoreCase(httpRequest.getContentType())) {
String requestBody = new String(httpRequest.getInputStream().readAllBytes(), "UTF-8");
System.out.println("---------- JSON REQUEST BODY ----------");
System.out.println(requestBody);
System.out.println("---------------------------------\n");
}
// 对于POST表单数据,可以尝试获取request的ParameterMap,但请注意解析表单数据可能会更复杂一些,因为需要额外处理文件上传等
// 其他处理(例如检查是否需要记录响应)
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) {}
@Override
public void destroy() {}
}
```
在这个滤器中,我们首先判断请求的方法(GET、POST),然后分别处理。对于POST请求,我们假设它是JSON格式,并读取输入流的内容。对于POST表单数据,你需要额外处理如`MultiPartHttpServletRequest`。
当你在Spring Boot项目中配置这个Filter时,记得添加到web.xml或application.properties/application.yml中,以便它在服务器启动时自动执行。
阅读全文