@Validated和@Valid三种异常捕获处理方式

下面是 @Validated 和 @Valid 的详细讲解和异常捕获处理方式攻略:

1. @Validated 和 @Valid 的区别

@Validated 和 @Valid 都是基于 JSR-303 的 Bean Validation 规范来进行数据校验的注解。

@Validated 注解是 Spring 提供的用于参数校验和值校验的注解。它可以让 Spring 在执行方法之前对参数进行校验,有助于减少冗余代码。

@Valid 注解是 Bean Validation 规范中的注解,用于标记需要进行数据校验的字段和方法参数,常用于表单数据验证等。

它们的使用方法不一样:

  • @Valid:用于标注要校验的参数
  • @Validated:用于标注参数的校验规则

因此,如果需要在程序中使用参数校验功能,需要同时引入 JSR-303 和 Spring Validation 依赖,然后在需要校验的地方使用注解进行标记。

2. @Validated 和 @Valid 的异常捕获处理方式

由于数据校验可能会存在不符合规范的情况,因此需要对校验异常进行捕获和处理。这里介绍三种常见的异常捕获处理方式:

2.1 使用 try-catch 捕获异常并处理

在需要进行校验的方法中使用 @Valid 或 @Validated 注解进行参数校验时,可以在方法内部使用 try-catch 代码块进行捕获异常和处理。

示例代码:

@PostMapping("/user")
@ResponseBody
public Result addUser(@RequestBody @Valid User user, BindingResult result) {
    try {
        if (result.hasErrors()) {
            return Result.fail(result.getAllErrors().get(0).getDefaultMessage());
        }
        // 保存用户信息
        userService.addUser(user);
        return Result.success();
    } catch (Exception e) {
        return Result.fail("添加用户失败");
    }
}

2.2 使用 @ExceptionHandler 注解处理异常

使用 @ExceptionHandler 注解处理异常可以统一处理所有控制器中的异常,无需在每个方法中都进行异常捕获和处理,提高了代码重用性和可维护性。

示例代码:

@Validated
@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
        return Result.fail(e.getBindingResult().getAllErrors().get(0).getDefaultMessage());
    }

    @ExceptionHandler(Exception.class)
    public Result handleException(Exception e) {
        return Result.fail(e.getMessage());
    }
}

2.3 使用 @ControllerAdvice 注解进行全局异常处理

使用 @ControllerAdvice 注解可以统一处理所有控制器中的异常,并且可以自定义返回结果,包括状态码、错误信息等。

示例代码:

@Validated
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
        return Result.fail(e.getBindingResult().getAllErrors().get(0).getDefaultMessage());
    }

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Result handleException(Exception e) {
        return Result.fail(e.getMessage());
    }
}

3. 总结

@Validated 和 @Valid 注解用于数据校验,在使用时需要引入 Bean Validation 和 Spring Validation 依赖。异常处理可以使用 try-catch 捕获、@ExceptionHandler 注解或者 @ControllerAdvice 注解进行全局处理,具体根据需求进行选择。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:@Validated和@Valid三种异常捕获处理方式 - Python技术站

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

相关文章

  • Java NIO实现群聊系统

    Java NIO实现群聊系统攻略 1. 概述 Java NIO(New I/O)是Java 1.4版本引入的新的I/O模型,与之前的I/O模型(阻塞式I/O)不同,Java NIO使用了非阻塞I/O模型。在Java NIO中,所有的I/O操作都是异步的,即非阻塞的。 Java NIO实现群聊系统,可以使用Java NIO的SocketChannel和Sele…

    Java 2023年5月30日
    00
  • Java杂谈之类和对象 封装 构造方法以及代码块详解

    Java杂谈之类和对象 封装 构造方法以及代码块详解 类和对象 Java是面向对象编程的语言,类是Java强大的概念之一。类是一组字段和方法的集合,用于表示某些相关的状态和行为。 在Java中,对象是类的实例。对象是通过类构造函数创建的,类构造函数定义了如何创建对象。按照惯例,类名应该以大写字母开头。 在Java中,类可以有任意数量的方法和成员,这些方法和成…

    Java 2023年5月26日
    00
  • logback自定义json日志输出示例详解

    对于这个话题,我会用标准的 Markdown 格式来回答,并且提供两个具体的示例说明。以下是完整攻略: logback自定义json日志输出示例详解 什么是logback? logback 是一个 Java 日志框架,与 log4j 相比具有更高的性能和更丰富的功能。 为什么需要自定义json日志输出? 在日志分析和处理上,json 格式的日志更加方便和易于…

    Java 2023年5月26日
    00
  • Intellij IDEA导入JAVA项目并启动(图文教程)

    下面详细讲解一下“Intellij IDEA导入JAVA项目并启动(图文教程)”的完整攻略。 1. 下载Intellij IDEA 首先,我们需要下载安装Intellij IDEA,可以到官网(https://www.jetbrains.com/idea/)下载安装包并进行安装。 2. 导入JAVA项目 在Intellij IDEA中选择File ->…

    Java 2023年5月26日
    00
  • JAVA 18位身份证号码校验码的算法

    我将为你详细讲解“JAVA 18位身份证号码校验码的算法”的完整攻略。 什么是身份证号码校验码 身份证号码由17位数字和1位校验码组成(18位)。其中,前17位为身份证号码,最后一位为校验码。校验码一般都是用来检验身份证号码的正确性,通过校验码可以判断一个身份证号码是否是正确的身份证号码。 JAVA 18位身份证号码校验码算法 校验码的计算规则如下: 将前1…

    Java 2023年6月15日
    00
  • Java秒杀系统:web层详解

    Java秒杀系统:web层详解攻略 本文主要讲解Java秒杀系统的web层,包括前端页面、后台接口、安全性优化等方面。 一、前端页面设计 在秒杀系统中,前端页面的设计十分重要,直接决定了用户体验的好坏。以下是本系统的设计思路: 1. 登录页面 登录页面分为两个部分,一个是用户名、密码和验证码输入框,另一个是一个按钮,可以选择单击或使用快捷登录。通过JQuer…

    Java 2023年5月30日
    00
  • java面试题之数组中的逆序对

    当我们在面试Java开发工程师时,通常会涉及到一些算法和数据结构知识。本文针对“数组中的逆序对”这道Java面试题,提供一份详细的攻略。 什么是数组中的逆序对? 数组中的逆序对指的是数组中左边的数比右边的数大,这样的一对数称为逆序对。 比如,对于数组[2, 4, 1, 3, 5],该数组中的逆序对为(2, 1),(4, 1),(4, 3)。 如何求解数组中的…

    Java 2023年5月19日
    00
  • 使用spring aop 统一捕获异常和写日志的示例demo

    使用Spring AOP统一捕获异常和写日志可以提高程序的健壮性和可维护性,下面是示例demo的详细攻略: 一、添加依赖 在pom.xml中添加Spring AOP和Spring Boot Starter Logging的依赖: <dependency> <groupId>org.springframework.boot</gr…

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