代码
@Slf4j @ControllerAdvice(basePackages = {"com.fast.controller"}) public class ControllerResponseAdvice implements ResponseBodyAdvice<Object> { @Override public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) { // response是Result类型,或者注释了NotResponseResult都不进行包装 return !(methodParameter.getParameterType().isAssignableFrom(R.class) || methodParameter.hasMethodAnnotation(NotResponseResult.class)); } @Override public Object beforeBodyWrite(Object data, MethodParameter returnType, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest request, ServerHttpResponse response) { // String类型不能直接包装 ObjectMapper objectMapper = new ObjectMapper(); if (returnType.getGenericParameterType().equals(String.class)) { try { // 将数据包装在Result里后转换为json串进行返回 return objectMapper.writeValueAsString(R.ok(data)); } catch (JsonProcessingException e) { throw new RuntimeException(e.getMessage()); } } // 否则直接包装成Result返回 return objectMapper; } }