Spring|Spring Boot实现功能的统一详解
目录
- 1. 统一用户登录权限验证
- 1.1 自定义拦截器
- 1.2 将自定义拦截器加入到系统配置
- 1.3 运行结果
- 1.4 总结
- 2. 统一异常处理
- 2.1 代码实现
- 2.2 运行结果
- 3. 统一数据返回格式
- 3.1 代码实现
- 3.2 运行结果
1. 统一用户登录权限验证 拦截器的实现分为两步:
创建自定义拦截器, 实现
HandlerInterceptor
接口并重写 preHandle
方法配置拦截器和拦截规则, (将自定义拦截器加入
WebMvcConfigurer
的 addInterceptors
方法中)1.1 自定义拦截器
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {HttpSession session = request.getSession(false); if (session != null && session.getAttribute("user") != null) {return true; }response.setStatus(401); return false; }}
1.2 将自定义拦截器加入到系统配置
@Configurationpublic class AppConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**") // 拦截所有的接口.excludePathPatterns("/**/login.html"); // 排除的接口}}
addPathPatterns
: 表示要拦截的URL.excludePathPatterns
: 表示需要排除的URL1.3 运行结果
文章图片
1.4 总结
Spring 中的拦截器是通过 动态代理 和 环绕通知 的思想实现的.
文章图片
文章图片
2. 统一异常处理 统一异常处理使用的是
@ControllerAdvice + @ExceptionHandler
来实现的,@ControllerAdvice
表示控制器通知类@ExceptionHandler
是异常处理器
2.1 代码实现
@ControllerAdvice@ResponseBodypublic class ErrorAdvice {@ExceptionHandler(NullPointerException.class)public Object nullPointerException(NullPointerException e) {HashMap map = new HashMap<>(); map.put("success",200); map.put("status",-1); map.put("message","空指针异常!"); return map; }}
2.2 运行结果
@RestController@RequestMapping("/user")public class UserController {@RequestMapping("/hi")public String say() {Object object = null; int i = object.hashCode(); return "Hello"; }}
文章图片
3. 统一数据返回格式 统一的数据返回格式可以使用 @ControllerAdvice + ResponseBodyAdvice 的方式实现.
- 添加
@ControllerAdvice
- 实现
ResponseBodyAdvice
接口, 并重写beforeBodyWrite
方法
3.1 代码实现
@ControllerAdvicepublic class ResponseAdvice implements ResponseBodyAdvice {/*** 内容是否重写, 返回true表示重写*/@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true; }@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {// 统一数据格式的封装HashMap result = new HashMap<>(); result.put("success",200); result.put("status",1); result.put("data",body); return result; }}
3.2 运行结果
@RestController@RequestMapping("/user")public class UserController {@RequestMapping("/index")public Object index() {User user = new User(); user.setUsername("SpringAOP"); user.setPassword("123456"); return user; }}
文章图片
到此这篇关于Spring Boot实现功能的统一详解的文章就介绍到这了,更多相关Spring Boot功能统一内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- Python|Python venv虚拟环境跨设备迁移的实现
- Vue项目如何实现rsa加密
- VUE 自定义指令实现点击后禁用elementUI按钮
- C语言实现学生考勤系统
- Vue中实现v-for循环遍历图片的方法
- 妙啊!纯|妙啊!纯 CSS 实现拼图游戏
- SpringCloud|SpringCloud-Rest微服务工程的构建
- Spring|Spring 整合 Mybatis 原理
- Java|Spring整合MyBatis——超详细
- Spring整合Mybatis|Spring整合Mybatis