|
@@ -1,69 +0,0 @@
|
|
-package com.alvin.advice;
|
|
|
|
-
|
|
|
|
-import com.alvin.annotation.ResponseResult;
|
|
|
|
-import com.alvin.common.entity.Result;
|
|
|
|
-import com.alvin.common.entity.ResultCode;
|
|
|
|
-import org.slf4j.Logger;
|
|
|
|
-import org.slf4j.LoggerFactory;
|
|
|
|
-import org.springframework.core.MethodParameter;
|
|
|
|
-import org.springframework.http.MediaType;
|
|
|
|
-import org.springframework.http.converter.HttpMessageConverter;
|
|
|
|
-import org.springframework.http.server.ServerHttpRequest;
|
|
|
|
-import org.springframework.http.server.ServerHttpResponse;
|
|
|
|
-import org.springframework.web.bind.annotation.ControllerAdvice;
|
|
|
|
-import org.springframework.web.context.request.RequestContextHolder;
|
|
|
|
-import org.springframework.web.context.request.ServletRequestAttributes;
|
|
|
|
-import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
|
|
|
|
-
|
|
|
|
-import javax.servlet.http.HttpServletRequest;
|
|
|
|
-import java.lang.annotation.Annotation;
|
|
|
|
-
|
|
|
|
-/**
|
|
|
|
- * @Description 封装返回的数据
|
|
|
|
- * @Author 田云
|
|
|
|
- * @Date 2020/12/19 11:44
|
|
|
|
- * @Version 1.0
|
|
|
|
- */
|
|
|
|
-@ControllerAdvice
|
|
|
|
-public class ResponseResultAdvice implements ResponseBodyAdvice<Object> {
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 请求中是否包含了 响应需要被包装的标记,如果没有,则直接返回,不需要重写返回体
|
|
|
|
- *
|
|
|
|
- * @param methodParameter
|
|
|
|
- * @param aClass
|
|
|
|
- * @return
|
|
|
|
- */
|
|
|
|
- @Override
|
|
|
|
- public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
|
|
|
|
- ResponseResult annotation = methodParameter.getMethod().getDeclaringClass().getAnnotation(ResponseResult.class);
|
|
|
|
- //先判断类上面有没有注释,再判断方法上有没有注释
|
|
|
|
- if (annotation == null) {
|
|
|
|
- annotation = methodParameter.getMethod().getAnnotation(ResponseResult.class);
|
|
|
|
- }
|
|
|
|
- return annotation == null ? false : true;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 对 响应体 进行包装; 除此之外还可以对响应体进行统一的加密、签名等
|
|
|
|
- *
|
|
|
|
- * @param responseBody 请求的接口方法执行后得到返回值(返回响应)
|
|
|
|
- */
|
|
|
|
- @Override
|
|
|
|
- public Object beforeBodyWrite(Object responseBody, MethodParameter methodParameter,
|
|
|
|
- MediaType mediaType,
|
|
|
|
- Class<? extends HttpMessageConverter<?>> aClass,
|
|
|
|
- ServerHttpRequest serverHttpRequest,
|
|
|
|
- ServerHttpResponse serverHttpResponse) {
|
|
|
|
- //自定义的错误异常
|
|
|
|
- if (responseBody instanceof ResultCode) {
|
|
|
|
- ResultCode code = (ResultCode) responseBody;
|
|
|
|
- if (code == ResultCode.SUCCESS) {
|
|
|
|
- return Result.success();
|
|
|
|
- } else {
|
|
|
|
- return Result.failure(code);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return Result.byObject(responseBody);
|
|
|
|
- }
|
|
|
|
-}
|
|
|