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日

相关文章

  • GSON实现Java对象与JSON格式对象相互转换的完全教程

    GSON实现Java对象与JSON格式对象相互转换的完全教程 什么是GSON GSON是Google提供的用来在Java对象和JSON数据之间进行序列化和反序列化的Java库。GSON可以将Java对象转化为JSON字符串,也可以将JSON字符串转化为相应的Java对象。 准备工作 在使用GSON之前,您需要做以下准备工作: 下载GSON库 可以通过Mave…

    Java 2023年5月26日
    00
  • 使用java打印心型、圆形图案的实现代码

    以下是使用 Java 打印心型、圆形图案的实现代码攻略。 准备工作 首先,我们需要安装 Java 编程环境。可以在 Oracle 官网 下载 JDK,并按照官方文档进行安装。安装完成后,我们需要选择一款编辑器或者 IDE 来编写代码,常用的有 IntelliJ IDEA、Eclipse、VS Code等。 打印心型图案 要打印心型图案,我们可以使用嵌套循环来…

    Java 2023年5月26日
    00
  • JAVA生成pdf文件的实操教程

    JAVA生成PDF文件的实操教程 本教程将教你如何使用JAVA生成PDF文件。你将学会使用开源库iText,它是一个功能强大的PDF库,支持PDF文件的创建、文本、表格、图片、字体等元素的操作。 步骤1:导入iText库 你需要先下载iText库并导入到你的JAVA项目中。可以从官网或Github获取。使用maven管理,可以这样引入: <depend…

    Java 2023年5月19日
    00
  • Java BufferedOutputStream类的常用方法讲解

    Java BufferedOutputStream是一个高效字节输出流,它使用内部缓冲区将数据缓冲,然后批量写入到支持的输出流中,以提高系统的性能。本文将分享Java BufferedOutputStream类的常用方法,帮助大家更好地使用该类。 BufferedOutputStream类的常用方法 构造方法 BufferedOutputStream类有两个…

    Java 2023年5月26日
    00
  • SpringBoot自定义/error路径失效的解决

    下面是对于“SpringBoot自定义/error路径失效的解决”的完整攻略: 背景 在使用SpringBoot开发web应用的过程中,我们有时需要自定义error处理页面。按照惯例,我们可以将静态页面放在/resources/static/error路径下,然后在Controller层中自定义处理对应的erroCode,比如404、500等。这样,当用户访…

    Java 2023年5月26日
    00
  • java实现秒表功能

    下面是Java实现秒表功能的完整攻略: 确定界面布局 首先,要确定秒表界面的布局,可以使用Swing包提供的JFrame、JLabel等组件。 一个简单的秒表GUI界面可以包含如下控件: 用于显示秒数的JLabel。 用于开始、停止、清零等操作的JButton。 (可选)用于记录计时时间的列表或文本框。 编写计时器逻辑 初始秒表面板布局完成后,需要编写计时器…

    Java 2023年5月20日
    00
  • jQuery ajax MD5实现用户注册即时验证功能

    下面是“jQuery ajax MD5实现用户注册即时验证功能”的完整攻略: 介绍 在用户注册过程中,我们希望用户在输入用户名或邮箱时,能够即时验证输入是否合法,避免用户提交无效数据。本教程将介绍如何使用jQuery ajax和MD5实现用户注册即时验证功能。 步骤 以下是实现该功能的大致步骤: 在HTML页面中添加用户名和邮箱的输入框以及一个用于显示验证结…

    Java 2023年6月16日
    00
  • Java使用DateTimeFormatter实现格式化时间

    下面是针对“Java使用DateTimeFormatter实现格式化时间”的完整攻略: 引言 在Java中,有时我们需要将时间转换为特定格式以便与其他系统交互。这时我们可以使用Java 8引入的DateTimeFormatter类进行格式化。该类提供了一些预定义的格式模式,也允许用户定义自己的格式模式。 步骤 1. 创建一个LocalDateTime对象 D…

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