package cn.flightfeather.supervision.config
|
|
import cn.flightfeather.supervision.lightshare.vo.BaseResponse
|
import cn.flightfeather.supervision.lightshare.vo.DataHead
|
import com.fasterxml.jackson.databind.ObjectMapper
|
import org.springframework.core.MethodParameter
|
import org.springframework.http.MediaType
|
import org.springframework.http.converter.HttpMessageConverter
|
import org.springframework.http.server.ServerHttpRequest
|
import org.springframework.http.server.ServerHttpResponse
|
import org.springframework.web.bind.annotation.RestControllerAdvice
|
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice
|
|
/**
|
* 全局响应体增强器
|
* @date 2025/10/11
|
* @author feiyu02
|
*/
|
@RestControllerAdvice(basePackages = ["cn.flightfeather.supervision.lightshare.web"])
|
class GlobalResponseAdvice : ResponseBodyAdvice<Any?> {
|
|
/**
|
* 是否支持增强
|
* 通过检查方法或类上有@IgnoreResponseAdvice注解的,才不进行增强
|
* @param returnType 方法参数
|
* @param converterType 消息转换器类型
|
* @return 是否支持增强
|
*/
|
override fun supports(returnType: MethodParameter, converterType: Class<out HttpMessageConverter<*>>): Boolean {
|
return !(returnType.method?.isAnnotationPresent(IgnoreResponseAdvice::class.java) == true ||
|
returnType.containingClass.isAnnotationPresent(IgnoreResponseAdvice::class.java))
|
}
|
|
override fun beforeBodyWrite(
|
body: Any?,
|
returnType: MethodParameter,
|
selectedContentType: MediaType,
|
selectedConverterType: Class<out HttpMessageConverter<*>>,
|
request: ServerHttpRequest,
|
response: ServerHttpResponse,
|
): Any? {
|
if (body is BaseResponse<*>) {
|
return body
|
}
|
if (body is String) {
|
return ObjectMapper().writeValueAsString(BaseResponse.success(body))
|
}
|
return BaseResponse.success(body)
|
}
|
}
|