Java中的Valid和Validated的比较内容

当我们进行Java Bean校验时,通常会使用Hibernate提供的校验框架。Valid和Validated是该框架中最常用的两种表单验证注解,它们都是用于指定校验组,在校验时都可以用来限制哪些校验组中的校验规则生效。但是,它们有一些区别。下面我将详细讲解Java中Valid和Validated的比较内容,帮助读者理解它们的使用方法。

Valid注解

@Valid注解通常作用于Java Bean中的字段中,用于标示要对该字段进行校验。如果该字段是一个复杂类型的对象,那么在校验该对象时,也会对该对象中所有需要校验的字段进行递归校验。@Valid注解还可以用于标识一个方法参数,例如:

@RequestMapping(value = "/user", method = RequestMethod.POST)
public String addUser(@RequestBody @Valid UserDTO userDTO) {
    // do something
}

在上述代码中,UserDTO是一个Java Bean,它作为方法的参数提交,请求体中的数据将自动转换成一个UserDTO对象。其中,使用了@Valid注解对UserDTO对象进行校验。

Validated注解

@Validated注解作用于类或方法上,用于标识一个校验规则组。当需要使用混合多个校验注解时,可以使用@Validated来声明一个校验组,这样可以只在某个特定组中执行校验规则。例如:

@Validated
@RestController
public class UserController {
    @RequestMapping("/users")
    public List<UserDTO> getUsers(@RequestParam @Size(min = 1, max = 10, message = "用户名长度必须在1~10字符之间!") String name) {
        // do something
    }
}

在上述示例中,使用了@Validated注解来声明校验规则组,同时在@RequestParam注解中使用了@Size注解来指定name参数的校验规则,并在注解中指明了校验组。

Valid和Validated的区别

@Valid@Validated的区别主要有两点:

  1. Supported locations:@Valid注解只支持标注在Field、Getter、Setter、Constructor和Method参数上,而@Validated注解只能用来标记方法和类。

  2. Group support:@Valid注解只能进行默认或默认分组的校验,而@Validated注解除了支持分组的校验外,还可以指定多个验证组。

综上所述,可以看出二者之间并没有直接的比较,而使用场景也不太相同。

示例代码

下面是一个例子,其中展示了如何在Java Bean中应用@Valid@Validated注解,具体代码如下。

public class UserDTO {
    @NotNull(message = "用户名不能为空!")
    private String name;

    @Length(min = 8, max = 32, message = "密码长度必须在8~32字符之间!")
    private String password;

    @Valid
    private AddressDTO address;

    @Min(value = 18, message = "年龄必须大于等于18岁!")
    private int age;

    // 省略getter和setter方法
}

public class AddressDTO {
    @NotNull(message = "省份不能为空!")
    private String province;

    @NotNull(message = "城市不能为空!")
    private String city;

    @NotNull(message = "区县不能为空!")
    private String district;

    // 省略getter和setter方法
}

@RestController
@Validated
public class UserController {
    @RequestMapping("/user")
    public UserDTO addUser(@RequestBody @Valid UserDTO userDTO) {
        // do something
    }

    @GetMapping("/user/{id}")
    public UserDTO getUserById(@PathVariable @Min(value = 1, message = "用户ID必须大于等于1!") Long id) {
        // do something
    }
}

在上述代码中,UserDTO和AddressDTO是Java Bean,用于承载用户信息和地址信息。其中,在UserDTO中使用了@Valid注解对AddressDTO进行递归校验,在UserController中使用了@Validated注解并在方法上使用了@RequestBody注解和@PathVariable注解来指定参数的校验规则。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中的Valid和Validated的比较内容 - Python技术站

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

相关文章

  • Java如何提供给第三方使用接口方法详解

    Java提供给第三方使用接口方法是指使用Java编写一个库,供其他开发者在自己的项目中使用,这个库就是接口。接口提供了一种标准化、规范化的编程方法,让编写代码变得更加高效和可维护。 下面是Java提供给第三方使用接口方法的详细攻略: 1.编写接口类: 接口是一种抽象的数据类型,它只有方法声明,没有方法体。接口用于定义某种功能的标准,而不关心这个功能的具体实现…

    Java 2023年5月26日
    00
  • JAVA中STRING的常用方法小结

    下面是关于”JAVA中STRING的常用方法小结”的完整攻略: 1. 字符串的常用方法 Java中String类的常用方法如下: 1.1 以字符串形式返回字符序列 String str = "Hello World!"; System.out.println(str.toString()); 结果:Hello World! 1.2 将字符…

    Java 2023年5月26日
    00
  • Java对文件进行基本操作案例讲解

    当需要对文件进行基本操作时,Java提供了一系列的类和方法来实现对文件的读写和管理,这些类主要包括:File类、FileReader类、FileWriter类、BufferedReader类和BufferedWriter类等。下面将详细讲解如何在Java中对文件进行基本的操作。 创建文件 在Java中创建新的文件我们需要用到File类的createNewFi…

    Java 2023年5月20日
    00
  • java对同一个文件进行读写操作方法

    要在Java中对同一个文件进行读写操作,我们可以使用Java的File类和I/O流,具体方法如下: 使用File类实例化File对象来代表文件。可以在实例化File对象时指定文件的路径和文件名,例如: File file = new File("path/to/file.txt"); 其中,”path/to/file.txt”应替换为实际…

    Java 2023年5月19日
    00
  • java eclipse 出现 xxx cannot be resolved to a type 错误解决方法

    当使用Java Eclipse进行编程时,在某些情况下可能会遇到”xxx cannot be resolved to a type”(xxx无法解析为类型)的错误提示,这通常是由未正确引入相关包或类文件导致的。下面是一个详细的解决方法: 步骤1:检查Java Build Path 在Eclipse中,右键单击Java项目并选择Properties,然后选择J…

    Java 2023年5月20日
    00
  • java Apache poi 对word doc文件进行读写操作

    下面是Java Apache POI对Word Doc文件进行读写操作的攻略,包含以下步骤: 步骤一:引入Apache POI库 使用Maven来引入Apache POI需要添加以下依赖: <dependency> <groupId>org.apache.poi</groupId> <artifactId>po…

    Java 2023年5月19日
    00
  • 递归法求最大公约数和最小公倍数的实现代码

    递归法求最大公约数和最小公倍数的实现代码,可以分为以下两个步骤: 1.实现求最大公约数的递归函数 我们可以使用辗转相除法(又称欧几里得算法)来求解最大公约数,其核心代码如下: def gcd(a, b): if b == 0: return a else: return gcd(b, a % b) 该函数的原理是,若a和b的最大公约数为c,则有以下结论:a …

    Java 2023年5月26日
    00
  • 详解如何把cmd黑窗口把java文件打包成jar

    下面我为你详细讲解如何把cmd黑窗口把java文件打包成jar: 什么是Jar文件 Java ARchive文件是Java平台独立的软件包格式,它包含Java Class文件、META-INF目录等资源,可以方便地被Java虚拟机(JVM)和相关的开发工具所识别。 如何将Java文件打包成Jar 第一步:编写Java代码 首先,你需要编写Java代码,并确保…

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