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
    Constructor
    Description
    构造函数
  • Method Summary

    Modifier and Type
    Method
    Description
    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)
    在响应体写入之前进行处理
    boolean
    supports(@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, wait

    Methods inherited from interface org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice

    determineWriteHints
  • Constructor Details

    • GlobalResponseHandler

      public GlobalResponseHandler(List<String> ignorePaths)
      构造函数

      初始化忽略路径列表

      Parameters:
      ignorePaths - 忽略的路径列表
  • 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:
      supports in interface org.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:
      beforeBodyWrite in interface org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice<Object>
      Parameters:
      body - 响应体
      returnType - 方法返回类型
      selectedContentType - 选择的内容类型
      selectedConverterType - 选择的消息转换器类型
      request - HTTP请求对象
      response - HTTP响应对象
      Returns:
      处理后的响应体