《学会 SpringMVC 系列 · 写入拦截器 ResponseBodyAdvice》
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
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) {
// 这里可以根据需要过滤特定的Controller方法
return true;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
// 这里可以对body进行加工处理,或者添加额外的信息
// 例如,给所有响应添加一个公共字段
if (body instanceof Map) {
Map<String, Object> result = new HashMap<>();
result.put("status", "success");
result.put("data", body);
return result;
} else if (body instanceof ResponseEntity) {
ResponseEntity<?> responseEntity = (ResponseEntity<?>) body;
return ResponseEntity.ok(responseEntity.getBody());
}
return body;
}
}
这段代码演示了如何实现ResponseBodyAdvice
接口,并在beforeBodyWrite
方法中对响应体进行加工。这里根据返回的body类型,添加了一个简单的示例,在实际的应用中,可以根据具体需求进行复杂的逻辑处理。
评论已关闭