package io.dataease.controller.handler; import com.google.gson.Gson; import io.dataease.controller.ResultHolder; import io.dataease.controller.handler.annotation.NoResultHolder; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; 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; /** * 统一处理返回结果集 */ @RestControllerAdvice(value = {"io.dataease"}) public class ResultResponseBodyAdvice implements ResponseBodyAdvice { @Override public boolean supports(MethodParameter methodParameter, Class> converterType) { return MappingJackson2HttpMessageConverter.class.isAssignableFrom(converterType) || StringHttpMessageConverter.class.isAssignableFrom(converterType); } @Override public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class> converterType, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { // 处理空值 if (o == null && StringHttpMessageConverter.class.isAssignableFrom(converterType)) { return null; } if (methodParameter.hasMethodAnnotation(NoResultHolder.class)) { return o; } if (!(o instanceof ResultHolder)) { if (o instanceof String) { return new Gson().toJson(ResultHolder.success(o)); } return ResultHolder.success(o); } return o; } }