Spring Boot的几种统一处理方式梳理小结

 更新时间:2023年05月17日 11:14:05   作者:迹_Jason  
这篇文章主要为大家介绍了Spring Boot的几种统一处理方式梳理小结,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

为了程序返回数据友好,返回给前端的数据信息是可读的,往往会考虑将异常进行封装或者组织为结构化返回。

基于 Spring Boot 体系,原本已经提供了一些方式实现,我们今天主要聊的也是基于 Spring Boot 去解决上述问题。

@ExceptionHandler

@ExceptionHandler 可以作为统一拦截异常方式,对于指定的异常按照你想的方式自由组装返回的数据信息和结构。自由度很高,这里需要注意的一点,往往大家会在这里就直接通过response对象返回响应结果,从而导致ResponseBodyAdvice、HandlerInterceptor之类的后续处理不再触发。 所以在使用该方式时,尽可能不直接使用response.write方式返回,而是使用统一的数据结构作为处理返回值。

// 推荐
    @ResponseStatus(value = HttpStatus.OK)
    @ExceptionHandler(value = ConstraintViolationException.class)
    @ResponseBody
    public Resp<Void> onBadMethodArgumentTypeMismatchException(ConstraintViolationException e) {
        return Resp.badRequest(e.getConstraintViolations().stream().findFirst().get().getMessage());
    }
// 不推荐
    @ExceptionHandler(Exception.class)
    public void exception(Exception e, HttpServletResponse response) throws IOException {
        response.setContentType("application/json;charset=UTF-8");
        log.error("系统异常:", e);
        response.getWriter().write($.json.toJsonString(Resp.customize(RpcResult.SERVER_ERROR, "服务器异常,请稍后再试"));
    }

ErrorController

Spring Boot 在发生异常的时候,如果没有异常捕捉器存在,会默认调用/error接口(可以通过server.error.path修改),类似写接口一样,对异常进行捕捉处理。

该方式优先级上会弱一点,但也是一种好方式,还可以自己实现通过配置方式处理异常,可以参考:Dew

课外拓展

执行优先级说明

1、HandlerInterceptor.preHandle()
2、 业务方法
3、@ExceptionHandler
4、ResponseBodyAdvice.supports()
5、ResponseBodyAdvice.beforeBodyWrite()
6、HandlerInterceptor.postHandle()
7、HandlerInterceptor.afterCompletion()

以上就是Spring Boot的几种统一处理方式梳理小结的详细内容,更多关于Spring Boot统一处理的资料请关注脚本之家其它相关文章!

相关文章

  • Java的PriorityBlockingQueue优先级阻塞队列代码实例

    Java的PriorityBlockingQueue优先级阻塞队列代码实例

    这篇文章主要介绍了Java的PriorityBlockingQueue优先级阻塞队列代码实例,PriorityBlockingQueue顾名思义是带有优先级的阻塞队列,为了实现按优先级弹出数据,存入其中的对象必须实现comparable接口自定义排序方法,需要的朋友可以参考下
    2023-12-12
  • Java I/O (Input/Output)文件字节流举例详解

    Java I/O (Input/Output)文件字节流举例详解

    Java的输入输出流(IO)是用于与外部设备(如文件、网络连接等)进行数据交互的机制,下面这篇文章主要给大家介绍了关于Java I/O (Input/Output)文件字节流的相关资料,需要的朋友可以参考下
    2024-08-08
  • 详解SpringBoot程序启动时执行初始化代码

    详解SpringBoot程序启动时执行初始化代码

    这篇文章主要介绍了详解SpringBoot程序启动时执行初始化代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Java 自定义Spring框架以及Spring框架的基本使用

    Java 自定义Spring框架以及Spring框架的基本使用

    Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发
    2021-10-10
  • 关于SpringBoot整合redis使用Lettuce客户端超时问题

    关于SpringBoot整合redis使用Lettuce客户端超时问题

    使用到Lettuce连接redis,一段时间后不操作,再去操作redis,会报连接超时错误,在其重连后又可使用,纠结是什么原因导致的呢,下面小编给大家带来了SpringBoot整合redis使用Lettuce客户端超时问题及解决方案,一起看看吧
    2021-08-08
  • hadoop运行java程序(jar包)并运行时动态指定参数

    hadoop运行java程序(jar包)并运行时动态指定参数

    这篇文章主要介绍了hadoop如何运行java程序(jar包)并运行时动态指定参数,使用hadoop 运行 java jar包,Main函数一定要加上全限定类名,需要的朋友可以参考下
    2021-06-06
  • springboot 实现长链接转短链接的示例代码

    springboot 实现长链接转短链接的示例代码

    短链接服务通过将长URL转换成6位短码,并存储长短链接对应关系到数据库中,用户访问短链接时,系统通过查询数据库并重定向到原始URL,实现快速访问,本文就来介绍一下如何使用,感兴趣的可以了解一下
    2024-09-09
  • SpringBoot原理之自动配置机制详解

    SpringBoot原理之自动配置机制详解

    Springboot遵循“约定优于配置”的原则,使用注解对一些常规的配置项做默认配置,减少或不使用xml配置,让你的项目快速运行起来,下面这篇文章主要给大家介绍了关于SpringBoot原理之自动配置机制的相关资料,需要的朋友可以参考下
    2021-11-11
  • 分布式Netty源码分析EventLoopGroup及介绍

    分布式Netty源码分析EventLoopGroup及介绍

    这篇文章主要介绍了分布式Netty源码分析EventLoopGroup及介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Spring spel表达式使用方法示例

    Spring spel表达式使用方法示例

    这篇文章主要介绍了Spring spel表达式使用方法示例,通过一些实例向大家展示了spel表达式的用法,需要的朋友可以了解下。
    2017-09-09

最新评论