springboot处理异常的5种方式

下面我会为您详细讲解Spring Boot处理异常的五种方式,过程中会包含两条示例。

1. 使用@ControllerAdvice

@ControllerAdvice可以用来捕获Controller抛出的异常,然后做出相应的处理。需要在类上加上注解@ControllerAdvice来表示这是一个异常处理类,然后再配合上@ExceptionHandler注解来处理具体的异常。以下是一个示例:

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public Result handleException(Exception e) {
        return Result.fail("系统出错了", e.getMessage());
    }
}

上面的代码表示了当出现任何一种异常时,都会调用handleException()方法来处理异常,并返回一个Result对象,其中包含了错误信息和异常消息。

2. 使用@ExceptionHandler

@ExceptionHandler可以用来处理控制器方法中抛出的特定异常,确保只有该异常产生时才会调用该方法。以下是一个简单的示例:

@RestController
public class ExceptionController {

    @RequestMapping("/exception")
    public void exception() throws Exception {
        throw new Exception("服务器内部错误!");
    }

    @ExceptionHandler(Exception.class)
    public Result handleException(Exception e) {
        return Result.fail("系统出错了", e.getMessage());
    }
}

上面的代码表示了当访问/exception路径时,如果出现异常,会调用handleException()方法来处理异常,并返回一个Result对象。

3. 使用@ResponseStatus

@ResponseStatus可以用来指定异常的响应状态码(status code)。方法中需要通过@ResponseStatus注解设置响应码(status属性)和响应原因(reason属性)。以下是一个简单的示例:

@RestController
public class ExceptionController {

    @RequestMapping("/exception")
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public void exception() throws Exception {
        throw new Exception("服务器内部错误!");
    }
}

上面的代码表示了当访问/exception路径时,如果出现异常,会返回一个状态码为400(HttpStatus.BAD_REQUEST)的响应。

4. 使用HandlerExceptionResolver

HandlerExceptionResolver是一个已经存在的视图解析器,它可以处理所有的异常。需要实现HandlerExceptionResolver接口并实现其中的resolveException()方法。以下是一个简单的示例:

@Component
public class CustomExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("errorMessage", "系统出错了:"+e.getMessage());
        modelAndView.setViewName("error");
        return modelAndView;
    }
}

上面的代码表示了当出现任何一种异常时,都会调用CustomExceptionResolver来处理异常,并返回一个error视图。

5. 使用ErrorController

ErrorController是Spring Boot提供的以可定制的方式处理全部错误返回信息的接口。需要创建一个自定义的ErrorController类并实现其中的error()方法。以下是一个简单的示例:

@RestController
public class CustomErrorController implements ErrorController {

    @RequestMapping("/error")
    public Result handleError(HttpServletRequest request) {
        Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
        Exception exception = (Exception) request.getAttribute("javax.servlet.error.exception");
        String errorMessage = exception.getMessage();
        return Result.fail("系统出错了",errorMessage);
    }

    @Override
    public String getErrorPath() {
        return "/error";
    }
}

上面的代码表示了当出现任何一种异常时,都会调用CustomErrorController来处理异常,并返回一个Result对象。

希望以上内容可以对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot处理异常的5种方式 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Java实现4种微信抢红包算法(小结)

    Java实现4种微信抢红包算法(小结) 概述 本文将介绍Java实现4种微信抢红包算法的详细过程。微信红包是现代社交中不可或缺的一种功能,而抢红包算法就是一个热门研究领域,它涉及到众多数学知识,本文将从原理、实现及效果等多个角度详细介绍这4种算法。 原理 微信抢红包算法的本质是在一定的条件下实现抢红包的随机性。在微信中,常用的抢红包算法有以下4种: 普通随机…

    Java 2023年5月19日
    00
  • Java对象的四种引用方式实例分析

    Java对象的四种引用方式实例分析 在Java中,对象的引用方式可以分为四种:强引用、软引用、弱引用和虚引用。每种引用方式有其特定的应用场景和特点。下面将详细介绍每一种引用方式以及其使用示例。 强引用 强引用是Java中最常用的引用方式。定义一个对象并将其赋值给一个引用变量时,这个引用变量就是强引用。只要强引用存在,对象就不会被垃圾回收机制回收。 例如:定义…

    Java 2023年5月26日
    00
  • Java线程安全问题的解决方案

    Java中线程安全问题是一个很常见的问题。当多个线程并发访问相同的代码块或共享的内存时,就可能会出现线程安全问题。这种问题可能会导致程序崩溃或者输出的结果错误。为了解决线程安全问题,我们需要采取一些特殊的措施来保证程序的正确性。本文将介绍一些常见的Java线程安全问题的解决方案。 使用同步机制 在Java中,可以使用synchronized关键字来保证代码块…

    Java 2023年5月19日
    00
  • 小程序websocket心跳库(websocket-heartbeat-miniprogram)

    小程序websocket心跳库(websocket-heartbeat-miniprogram)是一个专为微信小程序开发的websocket心跳保活库。本库基于wx.socket组件进行二次封装,使得小程序能够稳定地通过websocket进行双向实时通信。本库提供了websocket的连接建立、websocket的发送数据、websocket的心跳保活、we…

    Java 2023年5月23日
    00
  • SpringBoot 防御 CSRF 攻击的流程及原理解析

    下面是关于SpringBoot防御CSRF攻击的流程及原理解析的完整攻略。 什么是CSRF攻击? CSRF(Cross-site request forgery)攻击,中文名为跨站请求伪造攻击,指的是攻击者通过操纵用户在当前登录的网站发起一些未经授权的操作,例如在用户未登出的情况下转账等操作。攻击者通常在第三方网站发布伪造的请求链接,然后引诱用户在当前浏览器…

    Java 2023年5月20日
    00
  • Java文件选择对话框JFileChooser使用详解

    Java文件选择对话框JFileChooser使用详解 JFileChooser Java 文件选择对话框 (JFileChooser) 是 Java Swing 组件库中的一部分。它允许用户选择文件或目录,是一种常用的用户界面组件。 JFileChooser 核心属性 下面是 JFileChooser 的一些核心属性: currentDirectory: …

    Java 2023年5月20日
    00
  • spring-cloud-gateway启动踩坑及解决

    下面是关于“spring-cloud-gateway启动踩坑及解决”的完整攻略: Spring Cloud Gateway启动踩坑及解决 问题描述 在使用Spring Cloud Gateway时,有时会遇到启动失败的情况,主要是因为配置问题。如下: Caused by: java.lang.IllegalArgumentException: No inst…

    Java 2023年5月27日
    00
  • SpringBoot使用Feign调用其他服务接口

    下面是SpringBoot使用Feign调用其他服务接口的完整攻略。 Feign是什么? Feign是一种声明式Web服务客户端,它使得编写Web服务客户端变得更加容易。使用Feign,只需要定义服务接口并注解,Feign就会自动生成实现。提供了多种注解,比如@FeignClient、@RequestMapping等,使得我们可以快速定义和测试Web服务客户…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部