在 spring 中提供了个 ResponseBodyAdvice 接口,可以帮助我们将返回的值进行统一封装,代码如下
@ControllerAdvice @Slf4j public class MyResponseBodyAdvice implements ResponseBodyAdvice<Object> { @Override public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) { log.debug("MyRespOnseBodyAdvice==>supports:" + converterType); log.debug("MyRespOnseBodyAdvice==>supports:" + returnType.getClass()); log.debug("MyRespOnseBodyAdvice==>supports:" + MappingJackson2HttpMessageConverter.class.isAssignableFrom(converterType)); return MappingJackson2HttpMessageConverter.class.isAssignableFrom(converterType); } @Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { if (body == null) { return Result.success(); } if (body instanceof Result || body instanceof File || body instanceof ResponseEntity) { return body; } else { log.debug("MyRespOnseBodyAdvice==>beforeBodyWrite:" + returnType + "," + body); return Result.success(body); } } } 但是现在有个问题就是,一些第三方组件也使用 json 通信,比如 swagger。这时候就需要排除这些东西,或者是指定切面才进行统一封装。
请问 V 友们应该怎么做,可以不用 ResponseBodyAdvice 接口
