一文带你掌握SpringMVC扩展点RequestBodyAdvice和ResponseBodyAdvice如何使用及实现原理
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
@ControllerAdvice
public class CustomResponseBodyAdviceAdapter implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter returnType, Class converterType) {
return true; // 这里可以根据需要过滤应用此响应处理的方法
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
// 这里可以对body进行处理,增加额外的信息或修改现有信息
// 例如,添加一个额外的字段到JSON响应
if (body instanceof Map) {
Map<String, Object> map = (Map<String, Object>) body;
map.put("additionalField", "additionalValue");
}
return body; // 返回处理后的body
}
}
这个代码示例展示了如何实现ResponseBodyAdvice
接口,并对响应体进行处理。在beforeBodyWrite
方法中,你可以对响应体进行任何必要的修改,例如添加额外的信息或转换数据格式。这种方式对于全局添加响应处理逻辑非常有用,而不需要在每个控制器方法中重复相同的代码。
评论已关闭