Spring|Spring Boot实现功能的统一详解

目录

  • 1. 统一用户登录权限验证
    • 1.1 自定义拦截器
    • 1.2 将自定义拦截器加入到系统配置
    • 1.3 运行结果
    • 1.4 总结
  • 2. 统一异常处理
    • 2.1 代码实现
    • 2.2 运行结果
  • 3. 统一数据返回格式
    • 3.1 代码实现
    • 3.2 运行结果
【Spring|Spring Boot实现功能的统一详解】
1. 统一用户登录权限验证 拦截器的实现分为两步:
创建自定义拦截器, 实现 HandlerInterceptor 接口并重写 preHandle 方法
配置拦截器和拦截规则, (将自定义拦截器加入 WebMvcConfigureraddInterceptors 方法中)

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 : 表示需要排除的URL

1.3 运行结果
Spring|Spring Boot实现功能的统一详解
文章图片


1.4 总结
Spring 中的拦截器是通过 动态代理 和 环绕通知 的思想实现的.
Spring|Spring Boot实现功能的统一详解
文章图片

Spring|Spring Boot实现功能的统一详解
文章图片


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"; }}

Spring|Spring Boot实现功能的统一详解
文章图片


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|Spring Boot实现功能的统一详解
文章图片

到此这篇关于Spring Boot实现功能的统一详解的文章就介绍到这了,更多相关Spring Boot功能统一内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    推荐阅读