@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 MyBatis框架环境搭建详解

    关于”Java MyBatis框架环境搭建详解”,我将为您提供以下攻略: 环境准备 Java环境准备:本地安装JDK; 数据库环境准备:本地安装MySQL数据库; IDE环境准备:推荐使用IntelliJ IDEA进行项目开发,如果没有安装可以在官网下载并安装。 项目搭建 使用Maven创建项目:在IDE中创建项目,选择Maven项目,并选择MyBatis框…

    Java 2023年5月20日
    00
  • Java Listener监听器使用规范详细介绍

    下面就是「Java Listener监听器使用规范详细介绍」的攻略: 什么是 Java Listener 监听器? Java Listener 监听器是一种设计模式,主要用于处理事件。事件可以是用户在程序中的交互(例如,单击按钮、选择菜单项等),也可以是由程序本身触发的事件(例如,资源加载完成、对象/文件/网络IO操作完成等)。 Java Listener …

    Java 2023年6月15日
    00
  • Java Apache POI报错“IllegalFormatException”的原因与解决办法

    “IllegalFormatException”是Java的Apache POI类库中的一个异常,通常由以下原因之一引起: 格式错误:如果格式不正确,则可能会出现此异常。例如,可能会尝试使用错误的格式解析Excel单元格中的数据。 以下是两个实例: 例1 如果格式不正确,则可以尝试使用正确的格式以解决此问题。例如,在Java中,可以使用以下代码: FileI…

    Java 2023年5月5日
    00
  • Java访问数据库实例详解

    Java访问数据库实例详解 本文将详细讲解如何使用Java语言访问数据库,包括连接数据库、增删改查等基本操作。 连接数据库 Java程序可以通过JDBC(Java Database Connectivity) API来连接数据库,同样也需要使用数据库驱动程序。下面是一个使用MySQL数据库连接的示例代码: import java.sql.Connection…

    Java 2023年5月19日
    00
  • 利用 Linq+Jquery+Ajax 实现异步分页功能可简化带宽压力

    利用 Linq+Jquery+Ajax 实现异步分页功能可简化带宽压力的攻略包括以下几个步骤: 1. 后端接口 首先需要在后端实现一个接口用于提供分页数据,可以使用 Linq 来实现。下面是一个 C# 的示例代码: public JsonResult GetList(int pageIndex, int pageSize) { var list = db.U…

    Java 2023年5月19日
    00
  • Java8简单了解Lambda表达式与函数式接口

    Java8简单了解Lambda表达式与函数式接口攻略 什么是Lambda表达式? Lambda表达式是一种匿名函数,可以看成是对匿名类的一种简化写法,它能够以更简洁的语法实现相同的功能。 Lambda表达式的语法格式如下: (parameters) -> expression 其中,参数可以有0个或多个,参数类型可以显式声明,也可以根据上下文自动推断;…

    Java 2023年5月26日
    00
  • SpringBoot整合SpringDataJPA

    Spring Boot整合Spring Data JPA Spring Data JPA是Spring Framework的一部分,它提供了一种简单的方式来访问关系型数据库。Spring Boot提供了对Spring Data JPA的自动配置支持,使得整合Spring Data JPA变得非常简单。在本文中,我们将介绍如何使用Spring Boot整合Sp…

    Java 2023年5月15日
    00
  • Spring框架核心概念小结

    下面是Spring框架核心概念的完整攻略: Spring框架核心概念小结 1. IoC容器 IoC全称Inversion of Control,中文名为控制反转。在Spring框架中,IoC容器负责管理Java对象的创建和销毁,并且通过依赖注入的方式将对象之间的依赖关系交给容器来管理。Spring框架的IoC容器实现了Bean的管理,也就是管理对象实例,并提…

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