Spring Boot 如何使用 @ExceptionHandler 注解处理异常消息

本文介绍了如何在SpringBoot应用中使用@ExceptionHandler注解来捕获和处理异常,例如处理NumberFormatException和IllegalArgumentException,并返回自定义的HTTP错误消息。通过定义带有该注解的方法,可以为不同类型的异常提供专门的处理逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring Boot 如何使用 @ExceptionHandler 注解处理异常消息

在 Spring Boot 应用程序中,异常处理是非常重要的一部分。当应用程序出现异常时,我们需要能够捕获和处理这些异常,并向用户提供有用的错误消息。在 Spring Boot 中,可以使用 @ExceptionHandler 注解来处理控制器中的异常,并向用户提供有用的错误消息。本文将介绍如何使用 @ExceptionHandler 注解处理异常消息,并提供一些示例代码来帮助您更好地理解。

在这里插入图片描述

@ExceptionHandler 注解简介

@ExceptionHandler 注解是 Spring MVC 框架提供的一种异常处理机制。当控制器中抛出指定类型的异常时,Spring MVC 会自动调用使用 @ExceptionHandler 注解标记的方法来处理异常。

例如,以下代码演示了如何使用 @ExceptionHandler 注解来处理 NumberFormatException 异常:

@RestController
public class DemoController {
    @GetMapping("/test")
    public String test(@RequestParam("number") String number) {
        Integer.parseInt(number);
        return "success";
    }

    @ExceptionHandler(NumberFormatException.class)
    public ResponseEntity<String> handleNumberFormatException(NumberFormatException ex) {
        return ResponseEntity.badRequest().body("Invalid number format");
    }
}

在上面的代码中,我们定义了一个名为 DemoController 的控制器,并在其中提供了一个名为 test 的方法,用于将字符串转换为整数。如果字符串格式不正确,则会抛出 NumberFormatException 异常。我们还定义了一个名为 handleNumberFormatException 的方法,并使用 @ExceptionHandler 注解来处理 NumberFormatException 异常。如果控制器中抛出 NumberFormatException 异常,则会调用该方法来处理异常,并返回一个 HTTP 400 错误响应。

处理异常消息

除了捕获和处理异常外,我们还需要向用户提供有用的错误消息。在 Spring Boot 中,可以使用 ResponseEntity 类来返回一个自定义的 HTTP 响应。例如,以下代码演示了如何返回一个包含自定义错误消息的 HTTP 响应:

@RestController
public class DemoController {
    @GetMapping("/test")
    public String test(@RequestParam("number") String number) {
        Integer.parseInt(number);
        return "success";
    }

    @ExceptionHandler(NumberFormatException.class)
    public ResponseEntity<String> handleNumberFormatException(NumberFormatException ex) {
        String errorMessage = "Invalid number format. Please enter a valid number.";
        return ResponseEntity.badRequest().body(errorMessage);
    }
}

在上面的代码中,我们定义了一个名为 errorMessage 的自定义错误消息,并将其包装在一个 ResponseEntity 对象中。如果控制器中抛出 NumberFormatException 异常,则会调用 handleNumberFormatException 方法来处理异常,并返回一个包含自定义错误消息的 HTTP 响应。

处理多个异常

在实际开发中,可能会遇到多个类型的异常。在这种情况下,您可以为每种类型的异常定义一个单独的异常处理方法。例如,以下代码演示了如何为多个类型的异常定义单独的异常处理方法:

@RestController
public class DemoController {
    @GetMapping("/test")
    public String test(@RequestParam("number") String number) {
        Integer.parseInt(number);
        return "success";
    }

    @ExceptionHandler(NumberFormatException.class)
    public ResponseEntity<String> handleNumberFormatException(NumberFormatException ex) {
        String errorMessage = "Invalid number format. Please enter a valid number.";
        return ResponseEntity.badRequest().body(errorMessage);
    }

    @ExceptionHandler(IllegalArgumentException.class)
    public ResponseEntity<String> handleIllegalArgumentException(IllegalArgumentException ex) {
        String errorMessage = "Invalid argument. Please provide a valid argument.";
        return ResponseEntity.badRequest().body(errorMessage);
    }
}

在上面的代码中,我们为 NumberFormatException 异常和 IllegalArgumentException 异常分别定义了一个单独的异常处理方法。如果控制器中抛出任何一种类型的异常,则会调用相应的异常处理方法来处理异常,并返回一个包含自定义错误消息的 HTTP 响应。

总结

在本文中,我们介绍了如何使用 @ExceptionHandler 注解处理异常消息,并提供了一些示例代码来帮助您更好地理解。使用 @ExceptionHandler 注解可以捕获和处理控制器中的异常,并向用户提供有用的错误消息。使用 ResponseEntity 类可以返回一个自定义的 HTTP 响应,其中包含自定义错误消息。希望这篇文章对您有所帮助,谢谢阅读!

以下是完整的示例代码:

@RestController
public class DemoController {
    @GetMapping("/test")
    public String test(@RequestParam("number") String number) {
        Integer.parseInt(number);
        return "success";
    }

    @ExceptionHandler(NumberFormatException.class)
    public ResponseEntity<String> handleNumberFormatException(NumberFormatException ex) {
        String errorMessage = "Invalid number format. Please enter a valid number.";
        return ResponseEntity.badRequest().body(errorMessage);
    }

    @ExceptionHandler(IllegalArgumentException.class)
    public ResponseEntity<String> handleIllegalArgumentException(IllegalArgumentException ex) {
        String errorMessage = "Invalid argument. Please provide a valid argument.";
        return ResponseEntity.badRequest().body(errorMessage);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT徐师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值