iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot实现功能的统一详解
  • 834
分享到

SpringBoot实现功能的统一详解

2024-04-02 19:04:59 834人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录1. 统一用户登录权限验证1.1 自定义拦截器1.2 将自定义拦截器加入到系统配置1.3 运行结果1.4 总结2. 统一异常处理2.1 代码实现2.2 运行结果3. 统一数据返回

1. 统一用户登录权限验证

拦截器的实现分为两步:

创建自定义拦截器, 实现 HandlerInterceptor 接口并重写 preHandle 方法

配置拦截器和拦截规则, (将自定义拦截器加入 WEBmvcConfigureraddInterceptors 方法中)

1.1 自定义拦截器

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public 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 将自定义拦截器加入到系统配置

@Configuration
public class AppConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorReGIStry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("login.html"); // 排除的接口
    }
}

addPathPatterns : 表示要拦截的URL.

excludePathPatterns : 表示需要排除的URL

1.3 运行结果

1.4 总结

spring 中的拦截器是通过 动态代理 和 环绕通知 的思想实现的.

2. 统一异常处理

统一异常处理使用的是 @ControllerAdvice + @ExceptionHandler 来实现的,

  • @ControllerAdvice 表示控制器通知类
  • @ExceptionHandler 是异常处理器

两个结合表示当出现异常的时候执行某个通知, 也就是执行某个方法事件

2.1 代码实现

@ControllerAdvice
@ResponseBody
public class ErrorAdvice {
    @ExceptionHandler(NullPointerException.class)
    public Object nullPointerException(NullPointerException e) {
        HashMap<String, Object> 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 代码实现

@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice {
    
    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        return true;
    }
    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        // 统一数据格式的封装
        HashMap<String, Object> 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功能统一内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBoot实现功能的统一详解

本文链接: https://www.lsjlt.com/news/151961.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作