package io.dataease.result; import io.dataease.i18n.I18n; import io.dataease.i18n.Translator; import io.dataease.utils.DeReflectUtil; import io.dataease.utils.JsonUtil; import org.apache.commons.lang3.ObjectUtils; 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.util.ReflectionUtils; 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) { // try { // // 强行置为false // ReflectionUtils.invokeMethod(DeReflectUtil.findMethod(o.getClass(), "setInIframeError"), o, false); // } catch (Exception e) { // } // 处理空值 if (o == null && StringHttpMessageConverter.class.isAssignableFrom(converterType)) { return null; } //if true, need to translate if (methodParameter.hasMethodAnnotation(I18n.class)) { o = translate(o); } if (ObjectUtils.isNotEmpty(mediaType) && MediaType.APPLICATION_XML_VALUE.equals(mediaType.toString())) { return o; } if (!(o instanceof ResultMessage)) { ResultMessage resultMessage = ResultMessage.success(o); if (o instanceof String) { return JsonUtil.toJSONString(resultMessage); } return resultMessage; } return o; } // i18n private Object translate(Object obj) { return Translator.translateObject(obj); } }