Spring Boot实现功能的统一详解

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

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("/**") // 拦截所有的接口
                .excludePathPatterns("/**/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 {
    /**
     * 内容是否重写, 返回true表示重写
     */
    @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功能统一内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何在Springboot实现拦截器功能

    preHandle: 预先处理,在目标的controller方法执行之前,进行处理 postHandle: 在目标的controller方法执行之后,到达指定页面之前进行处理 afterCompletion: 在页面渲染之后进行处理 方法: 1.Springboot通过实现HandlerInterceptor接口实现拦截器 2.通过WebMvcConfigurer实现一个配置类,再通过@Configuration 注解注入到容器 3.指定拦截规则 以用户登录为案例,若用户没有登录session里

  • SpringBoot分页查询功能的实现方法

    目录 前言: 首先是手动实现分页查询: 接下来是关联前端分页和后台数据: 总结 前言: 学习了SpringBoot分页查询的两种写法,一种是手动实现,另一种是使用框架实现.现在我将具体的实现流程分享一下. 首先是手动实现分页查询: 先复习一下,SQL中的limit关键字,下面一行sql语句的意思是从第二个数据开始查,查询出两条数据 SELECT * FROM sys_user limit 1,2; 使用limit前一个参数pageNum是从第几个数据开始查,后一个参数pageSize是查询多少条

  • 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 的 addInterce

  • spring boot的maven配置依赖详解

    本文介绍了spring boot的maven配置依赖详解,分享给大家,具体如下: 我们通过引用spring-boot-starter-parent,添加spring-boot-starter-web 可以实现web项目的功能,当然不使用spring-boot-start-web,通过自己添加的依赖包也可以实现,但是需要一个个添加,费时费力,而且可能产生版本依赖冲突.我们来看下springboot的依赖配置: 利用pom的继承,一处声明,处处使用.在最顶级的spring-boot-dependen

  • Spring Boot整合EhCache的步骤详解

    本文讲解Spring Boot与EhCache的整合. 1 EhCache简介 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认CacheProvider.Ehcache是一种广泛使用的开源Java分布式缓存.主要面向通用缓存,Java EE和轻量级容器.它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点. 2 Spring Boot整合EhCache步骤 2.

  • Spring boot Thymeleaf配置国际化页面详解

    目录 1.编写多语言国际化配置文件 2.编写配置文件 3.定制区域信息解析器 4.页面国际化使用 5.整合效果测试 1.编写多语言国际化配置文件 在项目的类路径resources下创建名称为i18n的文件夹,并在该文件夹中根据需要编写对应的多语言国际化文件login.properties.login_zh_CN.properties和login_en_US.properties文件 login.properties login.tip=请登录login.username=用户名login.pas

  • spring boot(四)之thymeleaf使用详解

    在上篇文章springboot(二):web综合开发中简单介绍了一下thymeleaf,这篇文章将更加全面详细的介绍thymeleaf的使用.thymeleaf 是新一代的模板引擎,在spring4.0中推荐使用thymeleaf来做前端模版引擎. thymeleaf介绍 简单说, Thymeleaf 是一个跟 Velocity.FreeMarker 类似的模板引擎,它可以完全替代 JSP .相较与其他的模板引擎,它有如下三个极吸引人的特点: 1.Thymeleaf 在有网络和无网络的环境下皆可

  • Spring boot admin 服务监控利器详解

    目录 一.简介 二.搭建 1.服务端 2.客户端 3.启动项目 4.客户端配置 3.微服务 3.1.服务端 3.2.客户端 4.我的微服务预警发送其他服务状态信息思路 一.简介 用于对 Spring Boot 应用的管理和监控.可以用来监控服务是否健康.是否在线.以及一些jvm数据等等.Spring Boot Admin 分为服务端(spring-boot-admin-server)和客户端(spring-boot-admin-client),服务端和客户端之间采用 http 通讯方式实现数据交

  • spring Boot与Mybatis整合优化详解

    SpringBoot官方文档http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ 关于spring-boot与mybatis整合优化方面的介绍,就是Mybatis-Spring-boot-starter的介绍: 1.取消spring-mybatis.xml配置 ①自动检测已存在的Datasource 之前,需要在spring-mybatis.xml中配置datasource的Bean,现在只需要在applicat

  • spring boot + jpa + kotlin入门实例详解

    spring boot +jpa的文章网络上已经有不少,这里主要补充一下用kotlin来做. kotlin里面的data class来创建entity可以帮助我们减少不少的代码,比如现在这个User的Entity,这是Java版本的: @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String firstName; private S

  • Spring boot跨域设置实例详解

    定义:跨域是指从一个域名的网页去请求另一个域名的资源 1.原由 公司内部有多个不同的子域,比如一个是location.company.com ,而应用是放在app.company.com , 这时想从 app.company.com去访问 location.company.com 的资源就属于跨域 本人是springboot菜鸟,但是做测试框架后端需要使用Springboot和前端对接,出现跨域问题,需要设置后端Response的Header.走了不少坑,在这总结一下以备以后使用 2.使用场景

  • Spring boot @RequestBody数据传递过程详解

    这篇文章主要介绍了Spring boot @RequestBody数据传递过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 @RequestBody需要接的参数是一个string化的json @RequestBody,要读取的数据在请求体里,所以要发post请求,还要将Content-Type设置为application/json java的api 参数为JSONObject,获取到的参数处理 @PostMapping("/combine

随机推荐