如何在 Spring 引导过滤器中获取 HTTP 请求正文内容?
How to get the HTTP Request body content in a Spring Boot Filter?
我想获取发布到 RestController 的原始内容。我需要它对原始输入进行一些处理。
如何在不干扰过滤器链的情况下获取原始正文内容?
这是 controllerAdvice 的示例,您可以在其中像在控制器中一样访问 RequestBody 和 RequestHeader。模型属性方法基本上是添加在所有页面或控制器流中使用的模型属性。它在控制器方法启动之前被调用。它提供了更简洁的方式来访问 RESTful 功能,而不是复杂的方式。
@ControllerAdvice(annotations = RestController.class)
public class ControllerAdvisor {
@ModelAttribute
public void addAttributes(HttpServletRequest request, HttpServletResponse response,Model model, @RequestBody String requestString, @RequestHeader(value = "User-Agent") String userAgent) {
// do whatever you want to do on the request body and header.
// with request object you can get the request method and request path etc.
System.out.println("requestString" + requestString);
System.out.println("userAgent" + userAgent);
model.addAttribute("attr1", "value1");
model.addAttribute("attr2", "value2");
}
}
我使用@ModelAttribute 方法从@RequestBody 设置值。
@ControllerAdvice
public class CustomRestExceptionHandler extends ResponseEntityExceptionHandler
{
public CustomRestExceptionHandler() {
super();
}
private Object request;
@ModelAttribute
public void setRequest(@RequestBody Object request) {
this.request = request;
}
@Override protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
logger.info(this.request)
}
}
我想获取发布到 RestController 的原始内容。我需要它对原始输入进行一些处理。
如何在不干扰过滤器链的情况下获取原始正文内容?
这是 controllerAdvice 的示例,您可以在其中像在控制器中一样访问 RequestBody 和 RequestHeader。模型属性方法基本上是添加在所有页面或控制器流中使用的模型属性。它在控制器方法启动之前被调用。它提供了更简洁的方式来访问 RESTful 功能,而不是复杂的方式。
@ControllerAdvice(annotations = RestController.class)
public class ControllerAdvisor {
@ModelAttribute
public void addAttributes(HttpServletRequest request, HttpServletResponse response,Model model, @RequestBody String requestString, @RequestHeader(value = "User-Agent") String userAgent) {
// do whatever you want to do on the request body and header.
// with request object you can get the request method and request path etc.
System.out.println("requestString" + requestString);
System.out.println("userAgent" + userAgent);
model.addAttribute("attr1", "value1");
model.addAttribute("attr2", "value2");
}
}
我使用@ModelAttribute 方法从@RequestBody 设置值。
@ControllerAdvice
public class CustomRestExceptionHandler extends ResponseEntityExceptionHandler
{
public CustomRestExceptionHandler() {
super();
}
private Object request;
@ModelAttribute
public void setRequest(@RequestBody Object request) {
this.request = request;
}
@Override protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
logger.info(this.request)
}
}