001package run.iget.framework.common.handler; 002 003import org.springframework.core.MethodParameter; 004import org.springframework.http.MediaType; 005import org.springframework.http.converter.HttpMessageConverter; 006import org.springframework.http.server.ServerHttpRequest; 007import org.springframework.http.server.ServerHttpResponse; 008import org.springframework.web.bind.annotation.RestControllerAdvice; 009import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; 010 011import com.alibaba.fastjson.JSON; 012 013import lombok.extern.slf4j.Slf4j; 014import run.iget.framework.common.resp.ResultResp; 015 016/** 017 * 代码千万行,注释第一行,注释不规范,迭代两行泪 018 * ---------------类描述----------------- 019 * 将RestController方法的返回值都包装成统一的格式 020 * ---------------类描述----------------- 021 * @author 大周 022 * @date 2022/11/11 21:47 023 */ 024@Slf4j 025@RestControllerAdvice 026public class RestControllerAdviceHandler implements ResponseBodyAdvice<Object> { 027 028 @Override 029 public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) { 030 return true; 031 } 032 033 @Override 034 public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType mediaType, 035 Class<? extends HttpMessageConverter<?>> selectedConverterType, 036 ServerHttpRequest request, ServerHttpResponse serverHttpResponse) { 037 if (body instanceof ResultResp) { 038 return body; 039 } 040 if (mediaType != MediaType.APPLICATION_JSON) { 041 serverHttpResponse.getHeaders().setContentType(MediaType.APPLICATION_JSON); 042 } 043 ResultResp responseEntity = ResultResp.ok(body); 044 // 如果是String类型,需要返回string对象 045 if (body instanceof String) { 046 return JSON.toJSONString(responseEntity); 047 } 048 return responseEntity; 049 } 050}