GlobalApiResponseControllerAdvice.java 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package com.mokasz.sample.common.aspect;
  2. import com.mokasz.sample.common.annotation.GlobalApiResponse;
  3. import com.mokasz.sample.common.model.ApiResponse;
  4. import lombok.SneakyThrows;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.springframework.core.MethodParameter;
  7. import org.springframework.http.MediaType;
  8. import org.springframework.http.converter.HttpMessageConverter;
  9. import org.springframework.http.server.ServerHttpRequest;
  10. import org.springframework.http.server.ServerHttpResponse;
  11. import org.springframework.web.bind.annotation.RestControllerAdvice;
  12. import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
  13. @RestControllerAdvice(value = {"com.mokasz.sample.api.controller", "com.mokasz.sample.admin.controller"})
  14. @Slf4j
  15. public class GlobalApiResponseControllerAdvice implements ResponseBodyAdvice<Object> {
  16. @Override
  17. public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> clazz) {
  18. return true;
  19. }
  20. @SneakyThrows
  21. @Override
  22. public Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> converter
  23. , ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
  24. if (body instanceof ApiResponse) {
  25. return body;
  26. }
  27. GlobalApiResponse globalApiResponse = methodParameter.getMethod().getAnnotation(GlobalApiResponse.class);
  28. if (null == globalApiResponse) {
  29. globalApiResponse = methodParameter.getDeclaringClass().getAnnotation(GlobalApiResponse.class);
  30. }
  31. if (null == globalApiResponse || globalApiResponse.ignore()) {
  32. return body;
  33. }
  34. return ApiResponse.ok(body);
  35. }
  36. }