SpringBoot统一功能的处理

这篇具有很好参考价值的文章主要介绍了SpringBoot统一功能的处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

SpringBoot拦截器

自定义拦截器

将自定义拦截器加入系统配置项

统一异常处理

创建异常处理类

 实现业务方法

统一数据返回格式

为什么需要统一数据返回格式

统一数据返回格式的实现

返回String时的报错愿意及处理方案


SpringBoot拦截器

使用SpringBoot拦截器来实现用户登录权限的校验.

如果使用SpringAOP来实现用户登录权限的校验会有两个问题:没办法获取到HttpSession对象;要对一部分方法进行拦截,一部分方法不进行拦截比如注册方法和登录方法,这样的话排除方法的规则很难定义,甚至没办法定义.

SpringBoot拦截器的实现分为两大步:自定义拦截器和将自定义拦截器加入到系统配置项.

自定义拦截器

创建自定义的拦截器,实现HandlerInterceptor接口的prehandle(执行目标方法之前的预处理方法)方法.

这里主要演示拦截器的实现,在项目中我们一般在返回false前要向前端返回特定json字符串来阐述此次交互是否成功,如果失败,失败的原因是什么.

SpringBoot统一功能的处理

将自定义拦截器加入系统配置项

将自定义拦截器加入WebMvcConfigurer的addInterceptors方法中.

SpringBoot统一功能的处理

addPathPatterns表示要拦截的url,"**"则表示拦截所有的方法.
excludePathPatterns表示要排除的url.

以上的拦截规则可以拦截此项目中使用的url包括静态文件(图片文件,js,css等).

加入了拦截器之后,程序正常的调度顺序:

SpringBoot统一功能的处理

小结:SpringBoot拦截器实现原理是基于SpringMVC框架的拦截器机制,当客户端发送请求时,请求会经过一系列的组件处理,其中就包括拦截器.


统一异常处理

进行统一异常处理就是为了无论后端程序是怎么执行的,都要给前端一个正常的响应.

实现统一的异常处理分为两步:创建一个异常处理的类和实现异常检测的处理方法.

创建异常处理类

加@ControllerAdvice注解就会监测到整个项目中的异常,并且也会有@Controller注解的功能.

SpringBoot统一功能的处理

 实现业务方法

这是一个处理空指针异常的方法,在捕捉到项目中的空指针异常的时候就会触发此异常处理方法,方法的业务代码是由程序员自主实现的,返回给前端特定字段.在项目中我们会实现统一的数据格式返回.在这里只是使用HashMap构造了三个字段.

SpringBoot统一功能的处理

 访问接口出现空指针的时候返回的状态码是200,响应字段就是我们设置的三个字段.这样就会给前端明确的信息.SpringBoot统一功能的处理

我们还要在类里实现一个匹配所有异常的方法

SpringBoot统一功能的处理

这就是默认的异常处理,当具体的异常匹配不到的时候,会执行此方法.


统一数据返回格式

为什么需要统一数据返回格式

  1. 方便前端程序员更好的接收和解析后端数据接口返回的数据.
  2. 降低前端程序员和后端程序员的沟通成本,按照某个格式实现就行了,所有的接口都是这样返回的.
  3. 有利于项目统一数据的维护和修改.
  4. 有利于后端技术部门的统一规范的标准制定,不会出现稀奇古怪的返回内容.

统一数据返回(强制性统一数据返回),会在返回数据之前进行数据的重写,这是一种保底策略.

统一数据返回格式的实现

统一数据返回格式使用@ControllerAdvice和ResponseBodyAdvice的方式实现.在数据返回给前端之前进行数据的重写,参数里的body就是controller方法里返回的结果(原返回值).

SpringBoot统一功能的处理

SpringBoot统一功能的处理


返回String时的报错原因及处理方案

当统一数据格式返回遇到原body是String的时候会报错:

SpringBoot统一功能的处理

说的是hashmap不能转换成string.

出现这个问题的原因是:返回的执行流程是分为三步的.

1.方法返回的是string

2.统一数据返回之前处理:String转换成HashMap

3.将HashMap转换成application/json字符串给前端(接口)

那么出现这个问题的原因就在第三步上.在执行第三步的时候会先判断原body的类型,如果是string就会使用StringHttpMessageConverter进行转换,不是string就使用HttpMessageConverter进行类型转换.在这个地方,如果是string了,就会使用尝试StringHttpMessageConverter把第二部的HashMap转成String JSON字符串,这样就出错了.判断是用的原body,转换是用的HashMap.

这样就会报出HashMap不能转换成String的错误.

解决方案:

1.将StringHttpMessageConverter去掉

SpringBoot统一功能的处理

2.在统一数据重写的时候,单独处理string类型,让其返回一个string字符串,而非HashMap.

SpringBoot统一功能的处理文章来源地址https://www.toymoban.com/news/detail-476561.html

到了这里,关于SpringBoot统一功能的处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot -05 SpringBoot web相关配置(静态资源访问、统一异常处理、文件上传、拦截器、统一跨域请求处理)

    小总结 SpringBoot是一个基于Spring的工具集,去帮我们完成了大量的配置。在SpringBoot中有一个约定大于配置的概念,就是他把我们很多第三方框架帮我们写好了,而且把我们整个第三方框架所需要的依赖全都通过起步依赖加进去了。开发中只需要加入起步依赖就可以实现某个场

    2024年02月01日
    浏览(36)
  • Spring Boot 统一功能处理(拦截器实现用户登录权限的统一校验、统一异常返回、统一数据格式返回)

    目录 1. 用户登录权限校验 1.1 最初用户登录权限效验 1.2 Spring AOP 用户统⼀登录验证 1.3 Spring 拦截器 (1)创建自定义拦截器 (2)将自定义拦截器添加到系统配置中,并设置拦截的规则 1.4 练习:登录拦截器 (1)实现 UserController 实体类 (2)返回的登录页面:login.html (3)实

    2024年02月12日
    浏览(34)
  • SpringBoot—统一功能处理

    利用 AOP 的思想对一些特定的功能进行统一的处理, 包括 使用拦截器实现用户登录权限的统一校验 统一异常的处理 统一数据格式的返回 通过一级路由调用多种方法, 需要保证这些方法的请求类型各不相同(GET, POST, PUT…) 使用 Spring AOP 可以实现统一拦截, 但 Spring AOP 的使用较为

    2024年02月13日
    浏览(25)
  • SpringBoot 统一功能的处理

    1.1 最初用户登录验证 从上述代码中可以看出每个方法都相同的登录权限校验 , 这样做的缺点是: 每个方法中都要单独写用户登录验证的方法 , 即使封装成公共方法 , 也一样要在方法中传参判断. 添加控制器越多, 调用用户登录的方法也越多 , 这样后期会增大维护成本. 用户登录

    2024年02月16日
    浏览(24)
  • SpringBoot统一功能的处理

    目录 SpringBoot拦截器 自定义拦截器 将自定义拦截器加入系统配置项 统一异常处理 创建异常处理类  实现业务方法 统一数据返回格式 为什么需要统一数据返回格式 统一数据返回格式的实现 返回String时的报错愿意及处理方案 使用SpringBoot拦截器来实现用户登录权限的校验. 如

    2024年02月08日
    浏览(61)
  • SpringBoot 统一功能处理

    登录、注册页面不拦截,其他页面都拦截 当登录成功写入 session 之后,拦截的页面可正常访问 调用顺序: 正常情况下,程序会在调用 Controller 之前进行相应的业务处理(我们在切面中定义的事务),业务通过后,才会调用Controller 层,然后就是Controller - Serrvice - Mapper - 数据

    2024年01月24日
    浏览(27)
  • 【Spring】SpringBoot 统一功能处理

    在日常使用 Spring 框架进行开发的时候,对于一些板块来说,可能需要实现一个相同的功能,这个功能可以是验证你的登录信息,也可以是其他的,但是由于各个板块实现这个功能的代码逻辑都是相同的,如果一个板块一个板块进行添加的话,开发效率就会很低,所以 Spring

    2024年01月18日
    浏览(33)
  • 【JavaEE进阶】——第八节.SpringBoot统一功能处理

    作者简介:大家好,我是未央; 博客首页: 未央.303 系列专栏:JavaEE进阶 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 文章目录 前言 一、统一用户的登录 1.1 Spring AOP 实现用户统一登录验证 1.2Spring拦截器实现统一用户的登录验证 1.3 实例演示(通

    2024年02月07日
    浏览(37)
  • springmvc统一异常处理拦截器

    使用@RestControllerAdvice+@ExceptionHandler实现 也可以使用@ControllerAdvice+@ResponseBody+@ExceptionHandler实现 创建一个异常处理的类,放在config包下  组件类:  也可以让不同的异常返回不同的结果,捕获什么异常由@ExceptionHandler的value属性决定,传入一个类对象(可以通过反射获得)  

    2024年02月15日
    浏览(32)
  • springboot统一拦截包装接口返回值

    1、作用 代替手动封装每个接口的返回值,否则每个有返回值的controller接口,都需要手动使用Resonse类包装返回结果 2、实现 方法返回值handler,需要实现接口HandlerMethodReturnValueHandler,并重写supportsReturnType和handleReturnValue方法。只有在supportsReturnType方法返回值为true的情况下才会

    2024年02月13日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包