成功统一返回ResponseBodyAdvice
时间: 2024-08-14 14:07:45 浏览: 43
详解SpringBoot统一响应体解决方案
`ResponseBodyAdvice`是Spring MVC中的一种拦截器接口,它允许你在请求响应体(ResponseBody)发送之前或之后执行自定义操作。这通常用于日志记录、异常处理、性能监控或其他需要对HTTP响应进行修改的情况。
要实现成功统一返回ResponseBodyAdvice,你可以创建一个新的类并实现`ResponseBodyAdvice`接口。下面是一个简单的示例:
```java
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.HandlerInterceptor;
@ControllerAdvice
public class CustomResponseBodyAdvice implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// 如果你想在发送响应之前做些什么,可以在这里添加逻辑
return true; // 返回true继续处理,false中断处理
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// 处理完成后的回调,比如设置共同的头部信息
HttpHeaders headers = new HttpHeaders();
headers.add("CustomHeader", "Value"); // 添加自定义头
if (modelAndView != null) { // 如果有模型视图
modelAndView.addObject("additionalData", "Some data"); // 添加额外的数据到视图
}
// 如果你想修改响应体,可以在这里操作
ResponseEntity<String> entity = ResponseEntity.ok(modelAndView == null ? "" : modelAndView.getViewName());
entity.getHeaders().add(headers); // 设置头信息
response.setContentType(entity.getContentType()); // 设置响应内容类型
response.getWriter().write(entity.getBody()); // 写入响应体
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) throws Exception {
// 请求完成后清理工作
}
}
```
在这个例子中,`preHandle()`会在每次请求开始时调用,而`postHandle()`则在处理结束后执行,可以用来定制响应的内容和头信息。记得在项目中注册这个拦截器以使其生效。
阅读全文