详解SpringBoot 处理异常的几种常见姿势

详解SpringBoot处理异常的几种常见姿势

在SpringBoot开发中,异常处理是一个非常重要的环节。合理的异常处理能够提高系统的稳定性和可维护性。本文将介绍几种常见的SpringBoot处理异常的姿势。

1. @ControllerAdvice和@ExceptionHandler

@ControllerAdvice是Spring4.0引入的一个注解,它可以用来处理全局的Controller的异常。@ExceptionHandler则是@ControllerAdvice下的注解,用来处理特定异常类型的异常。

代码示例:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(ArithmeticException.class)
    public ModelAndView handleArithmeticException(Exception ex) {
        ModelAndView mv = new ModelAndView();
        mv.addObject("exception", ex);
        mv.setViewName("error/arithmetic");
        return mv;
    }

    @ExceptionHandler(NullPointerException.class)
    public ModelAndView handleNullPointerException(Exception ex) {
        ModelAndView mv = new ModelAndView();
        mv.addObject("exception", ex);
        mv.setViewName("error/null_pointer");
        return mv;
    }
}

在上面的代码中,我们在一个类上加上@ControllerAdvice注解,表示这个类是一个全局异常处理类。然后我们在类中使用@ExceptionHandler注解来处理特定类型的异常。例如,handleArithmeticException方法处理ArithmeticException类型的异常,handleNullPointerException方法处理NullPointerException类型的异常。这两个方法都返回了一个包含异常信息的ModelAndView视图对象。

2. @ResponseStatus

@ResponseStatus注解用来指定处理某种异常时返回的HTTP状态码和异常信息。

代码示例:

@RestController
@RequestMapping("/user")
public class UserController {

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        User user = userRepository.findById(id).orElse(null);
        if (user == null) {
            throw new UserNotFoundException("User not found");
        }
        return user;
    }
}

@ResponseStatus(HttpStatus.NOT_FOUND)
class UserNotFoundException extends RuntimeException {
    public UserNotFoundException(String message) {
        super(message);
    }
}

在上面的代码中,我们在UserNotFoundException类上使用了@ResponseStatus注解,并指定了HTTP状态码为404。这样,当我们在controller中抛出UserNotFoundException类型的异常时,框架会自动返回一个包含异常信息和404状态码的响应结果。

3. ResponseEntity

ResponseEntity是SpringFramework中的一个响应实体类,它可以用来封装响应的HTTP头、HTTP状态码和响应体等信息。

代码示例:

@RestController
@RequestMapping("/user")
public class UserController {

    @GetMapping("/{id}")
    public ResponseEntity<?> getUserById(@PathVariable Long id) {
        User user = userRepository.findById(id).orElse(null);
        if (user == null) {
            return ResponseEntity.status(HttpStatus.NOT_FOUND)
                    .body(new ErrorResponse("User not found"));
        }
        return ResponseEntity.ok(user);
    }
}

class ErrorResponse {
    private String message;

    public ErrorResponse(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

在上面的代码中,我们在getUserById方法中使用了ResponseEntity来封装响应结果。当用户不存在时,我们使用ResponseEntity.status(HttpStatus.NOT_FOUND)来设置响应的HTTP状态码;然后再使用.body()设置响应的实体体,即一个包含异常信息的ErrorResponse对象;否则,我们使用ResponseEntity.ok()来设置响应的HTTP状态码为200,同时设置响应体为一个User对象。

小结

在开发SpringBoot应用程序时,异常处理是一个非常重要的环节。合理的异常处理能够提高系统的稳定性和可维护性。在本文中,我们介绍了几种常见的SpringBoot处理异常的姿势,包括@ControllerAdvice和@ExceptionHandler、@ResponseStatus和ResponseEntity。开发者可以根据实际需求选择不同的姿势来处理异常。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解SpringBoot 处理异常的几种常见姿势 - Python技术站

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

相关文章

  • request如何获取body的json数据

    获取HTTP请求的request body是常见的开发任务。在Node.js中,可以使用body-parser中间件来解析请求体解析成JSON对象。以下是获取HTTP请求的request body的完整攻略。 步骤1:安装body-parser中间件 在Node.js应用程序中,安装和使用body-parser中间件是处理请求体最常见的方法。要安装它,请使用…

    Java 2023年5月26日
    00
  • Java随机数算法原理与实现方法实例详解

    Java随机数算法原理与实现方法实例详解 随机数算法原理 随机数算法是根据一定的随机函数和一定的算法原理,生成一组具有随机性质的数值序列,其重要性在于可以产生安全可靠的加密密钥、模拟事件、以及用于科学计算等领域。Java语言对于随机数的生成提供了丰富的类库,包括java.util.Random和java.security.SecureRandom等类。 伪随…

    Java 2023年5月19日
    00
  • 五分钟教你手写 SpringBoot 本地事务管理实现

    手写Spring Boot本地事务管理实现 在Spring Boot应用程序中,我们可以使用本地事务管理来保证数据的一致性和完整性。本文将详细讲解手写Spring Boot本地事务管理实现的完整攻略,并提供两个示例。 1. 配置数据源和事务管理器 以下是配置数据源和事务管理器的基本流程: 在pom.xml文件中添加以下依赖: <dependency&g…

    Java 2023年5月15日
    00
  • 东八区springboot如何配置序列化

    下面是详细讲解“东八区SpringBoot如何配置序列化”的攻略。 1、序列化概念简述 Java中的序列化是指将一个Java对象转化为字节流,这样可以将对象存储在磁盘上或通过网络传输。而反序列化则是将字节流转化为对象。 在Spring Boot中,对象的序列化往往用于将对象作为响应返回给客户端或者使用Redis等缓存技术进行存储。 2、Spring Boot…

    Java 2023年5月20日
    00
  • Win2003平台上jsp虚拟主机环境的架设(IIS6+J2SDK+resin)

    这里提供Win2003平台上jsp虚拟主机环境的架设攻略,该环境采用IIS6+J2SDK+Resin,具体步骤如下: 准备工作 下载并安装J2SDK(Java SE Development Kit) 下载Resin,并解压到指定目录下。 下载并安装IIS6。 安装Resin 进入Resin解压后的主目录,找到bin目录。 右键点击resin.exe,选择“以…

    Java 2023年6月15日
    00
  • Java之Jackson使用案例详解

    Java之Jackson使用案例详解 Jackson是Java中最流行的JSON序列化和反序列化库之一,它提供了轻量级快速、灵活的JSON处理方式。本文将详细讲解在Java中如何使用Jackson进行JSON序列化和反序列化。内容如下: 简介 在Java中使用Jackson进行JSON处理时,可以使用以下依赖: <!– Jackson核心模块 –&…

    Java 2023年5月26日
    00
  • java实现的DES加密算法详解

    Java实现的DES加密算法详解 什么是DES加密算法 DES加密算法是一种对称密钥算法,全称为“Data Encryption Standard”,是美国IBM公司于1975年研制的一种对称密钥加密算法。DES算法的原理非常简单,就是将明文经过一系列置换和替换操作,最终被加密成密文。而解密过程就是将密文经过相应的操作,最终得到明文。 DES算法具有如下特点…

    Java 2023年5月19日
    00
  • 详解SpringMVC从基础到源码

    以下是关于“详解SpringMVC从基础到源码”的完整攻略,其中包含两个示例。 详解SpringMVC从基础到源码 SpringMVC是一个基于MVC模式的Web框架,它提供了一种灵活、高效的方式来开发Web应用程序。在本攻略中,我们将从基础概念到源码实现,全面讲解SpringMVC的工作原理和实现细节。 SpringMVC基础概念 MVC模式 MVC模式是…

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