Class GlobalResponseHandler
java.lang.Object
tech.riemann.nif.web.response.GlobalResponseHandler
- All Implemented Interfaces:
org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice<Object>
@RestControllerAdvice
public class GlobalResponseHandler
extends Object
implements org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice<Object>
全局响应处理器
实现ResponseBodyAdvice接口,用于统一处理API响应
主要功能: 1. 对所有API响应进行统一包装,将返回值封装为Result对象 2. 支持配置忽略路径,对指定路径的响应不进行包装 3. 自动忽略已为Result类型的响应
应用场景: - 统一API响应格式 - 简化控制器代码,不需要手动包装响应
- Author:
- Kerbores(kerbores@riemann.tech)
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbeforeBodyWrite(@Nullable Object body, @NonNull org.springframework.core.MethodParameter returnType, @NonNull org.springframework.http.MediaType selectedContentType, @NonNull Class<? extends org.springframework.http.converter.HttpMessageConverter<?>> selectedConverterType, @NonNull org.springframework.http.server.ServerHttpRequest request, @NonNull org.springframework.http.server.ServerHttpResponse response) 在响应体写入之前进行处理booleansupports(@NonNull org.springframework.core.MethodParameter returnType, @NonNull Class<? extends org.springframework.http.converter.HttpMessageConverter<?>> converterType) 判断是否支持处理响应体Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice
determineWriteHints
-
Constructor Details
-
GlobalResponseHandler
-
-
Method Details
-
supports
public boolean supports(@NonNull org.springframework.core.MethodParameter returnType, @NonNull Class<? extends org.springframework.http.converter.HttpMessageConverter<?>> converterType) 判断是否支持处理响应体M20: 排除 ResponseEntity/HttpEntity 返回类型——调用方已自行控制状态码与 body 结构, 二次包装会破坏其语义(如 404 error body 被包成 Result);其余类型返回 true
- Specified by:
supportsin interfaceorg.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice<Object>- Parameters:
returnType- 方法返回类型converterType- 消息转换器类型- Returns:
- 是否为可包装类型
-
beforeBodyWrite
public Object beforeBodyWrite(@Nullable Object body, @NonNull org.springframework.core.MethodParameter returnType, @NonNull org.springframework.http.MediaType selectedContentType, @NonNull Class<? extends org.springframework.http.converter.HttpMessageConverter<?>> selectedConverterType, @NonNull org.springframework.http.server.ServerHttpRequest request, @NonNull org.springframework.http.server.ServerHttpResponse response) 在响应体写入之前进行处理将非Result类型的响应包装为Result对象 对于二进制响应(如文件下载)等特殊Content-Type,不进行包装
- Specified by:
beforeBodyWritein interfaceorg.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice<Object>- Parameters:
body- 响应体returnType- 方法返回类型selectedContentType- 选择的内容类型selectedConverterType- 选择的消息转换器类型request- HTTP请求对象response- HTTP响应对象- Returns:
- 处理后的响应体
-