網站首頁 編程語言 正文
響應對象ResultVO
package com.example.poi.utils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @Author xu
* @create 2023/7/5 01
* @Version: V1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "響應對象")
public class ResultVO<T> implements Serializable {
private static final long serialVersionUID = -2548645345465031121L;
@ApiModelProperty(value = "狀態碼")
private Integer code;
@ApiModelProperty(value = "消息")
private String message;
@ApiModelProperty(value = "數據")
private T data;
public static <T> ResultVO success(T data){
ResultVO resultVO = new ResultVO(HttpOperateCodeEnum.SUCCESS.getCode(), HttpOperateCodeEnum.SUCCESS.getMessage(), data);
return resultVO;
}
public static <T> ResultVO<T> fail() {
return new ResultVO<T>(HttpOperateCodeEnum.FAIL.getCode(), HttpOperateCodeEnum.FAIL.getMessage(), null);
}
}
響應狀態碼HttpOperateCodeEnum
package com.example.poi.utils;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @Author xu
* @create 2023/7/5 01
* @Version: V1.0
*/
@Getter
@AllArgsConstructor
public enum HttpOperateCodeEnum {
SUCCESS(200, "操作成功"),
FAIL(400, "操作失敗");
private Integer code;
private String message;
}
定義注解ResponseResultAnnotation
package com.example.poi.utils;
import java.lang.annotation.*;
/**
* @Author xu
* @create 2023/7/5 01
* @Version: V1.0
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented
public @interface ResponseResultAnnotation {
}
響應加強實現類RestResponseHandler
package com.example.poi.utils;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.SneakyThrows;
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.RestControllerAdvice;
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.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
/**
* @Author xu
* @create 2023/7/5 01
* @Version: V1.0
*/
@RestControllerAdvice
public class RestResponseHandler implements ResponseBodyAdvice<Object> {
public static final String Response_Result_Annotation = "Response_Result_Annotation";
/**
* @param returnType
* @param converterType
* @return
*/
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
ResponseResultAnnotation responseResultVO = (ResponseResultAnnotation) request.getAttribute(Response_Result_Annotation);
return responseResultVO != null;
}
/**
* @param body
* @param returnType
* @param selectedContentType
* @param selectedConverterType
* @param request
* @param response
* @return
*/
@SneakyThrows
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
Class<? extends HttpMessageConverter<?>> selectedConverterType,
ServerHttpRequest request, ServerHttpResponse response) {
if (body instanceof ResultVO) {
return body;
}
return ResultVO.success(body);
}
}
攔截器RestResponseInterceptor
package com.example.poi.utils;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
/**
* @Author xu
* @create 2023/7/5 01
*/
public class RestResponseInterceptor implements HandlerInterceptor {
public static final String Response_Result_Annotation = "Response_Result_Annotation";
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
if (handler instanceof HandlerMethod) {
final HandlerMethod handlerMethod = (HandlerMethod) handler;
final Class<?> clazz = handlerMethod.getBeanType();
final Method method = handlerMethod.getMethod();
if (clazz.isAnnotationPresent(ResponseResultAnnotation.class)) {
request.setAttribute(Response_Result_Annotation, clazz.getAnnotation(ResponseResultAnnotation.class));
} else if (method.isAnnotationPresent(ResponseResultAnnotation.class)) {
request.setAttribute(Response_Result_Annotation, method.getAnnotation(ResponseResultAnnotation.class));
}
}
return true;
}
}
將攔截器注冊到Spring中管理
package com.example.poi.utils;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @Author xu
* @create 2023/7/5 01
* @Version: V1.0
*/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new RestResponseInterceptor());
}
}
原文鏈接:https://blog.csdn.net/qq_19891197/article/details/132282793
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-06-01 docker安裝nginx并配置ssl的方法步驟_docker
- 2022-11-04 詳解linux命令查看服務器上的實時日志_服務器其它
- 2022-08-06 Python中if?__name__==‘__main__‘用法詳情_python
- 2022-11-30 Linux實現徹底清理空文件夾的方法詳解_linux shell
- 2022-03-20 android自定義對話框實例代碼_Android
- 2022-10-03 Pandas數據集的分塊讀取的實現_python
- 2022-04-16 Android給通知channel靜音的方法實例_Android
- 2023-03-20 Redis使用Bitmap的方法實現_Redis
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支