在开发Web应用程序时,输入数据的验证是一个重要的问题。Spring Boot提供了两种方式来验证输入数据:@Validated
和@Valid
。这两种方式都可以用于验证请求参数和请求体中的数据。本文将详细介绍这两种验证方式的使用方法和区别。
@Validated
是Spring框架中的一个注解,它是JSR-303规范的扩展,可以用于在方法级别上校验方法参数。它可以用于验证请求参数和请求体中的数据。@Validated
注解可以用于方法级别和类级别上,用于验证方法参数和类属性。
@Valid
是JSR-303规范中定义的一个注解,它可以用于验证Java Bean中的属性。在Spring Boot中,@Valid
注解可以用于验证请求体中的数据。如果请求体中的数据是一个Java Bean对象,那么可以使用@Valid
注解来验证该对象的属性值是否符合要求。
@Validated
和@Valid
都可以用于验证输入数据,但是它们的使用场景不同。@Validated
注解主要用于验证方法参数,而@Valid
注解主要用于验证Java Bean对象的属性。
另外,@Validated
注解支持分组校验,可以根据不同的场景对同一个对象进行不同的校验。而@Valid
注解不支持分组校验,只能对整个Java Bean对象进行校验。
在方法级别上使用@Validated
注解,需要在方法参数上添加该注解。下面是一个简单的示例,演示了如何在方法级别上使用@Validated
注解。
@RestController
@RequestMapping("/users")
public class UserController {
@PostMapping
public User createUser(@RequestBody @Validated User user) {
// 处理用户创建逻辑
}
}
在上面的示例代码中,@Validated
注解被应用在User
对象上,用于验证请求体中的数据是否符合要求。
在类级别上使用@Validated
注解,需要在类上添加该注解。下面是一个简单的示例,演示了如何在类级别上使用@Validated
注解。
@RestController
@RequestMapping("/users")
@Validated
public class UserController {
@PostMapping
public User createUser(@RequestBody User user) {
// 处理用户创建逻辑
}
}
在上面的示例代码中,@Validated
注解被应用在UserController
类上,用于验证该类中所有方法的参数是否符合要求。
@Validated
注解支持分组校验,可以根据不同的场景对同一个对象进行不同的校验。下面是一个简单的示例,演示了如何使用分组校验。
public interface UpdateGroup {}
public interface CreateGroup {}
public class User {
@NotNull(groups = {UpdateGroup.class})
private Long id;
@NotBlank(groups = {CreateGroup.class})
private String name;
@NotBlank(groups = {CreateGroup.class})
private String password;
// 省略其他属性和方法
}
在上面的示例代码中,定义了两个分组:CreateGroup
和UpdateGroup
。User
对象中的id
属性只在UpdateGroup
分组中进行校验,而name
和password
属性只在CreateGroup
分组中进行校验。
在使用@Validated
注解时,可以通过groups
属性指定要使用的分组。下面是一个示例代码,演示了如何使用分组校验。
@RestController
@RequestMapping("/users")
@Validated
public class UserController {
@PostMapping
public User createUser(@RequestBody @Validated(CreateGroup.class) User user) {
// 处理用户创建逻辑
}
@PutMapping("/{id}")
public User updateUser(@PathVariable Long id, @RequestBody @Validated(UpdateGroup.class) User user) {
// 处理用户更新逻辑
}
}
在上面的示例代码中,createUser
方法中的User
对象只进行CreateGroup
分组的校验,而updateUser
方法中的User
对象只进行UpdateGroup
分组的校验。
在方法参数上使用@Valid
注解,需要在方法参数上添加该注解。下面是一个简单的示例,演示了如何在方法参数上使用@Valid
注解。
@RestController
@RequestMapping("/users")
public class UserController {
@PostMapping
public User createUser(@RequestBody @Valid User user) {
// 处理用户创建逻辑
}
}
在上面的示例代码中,@Valid
注解被应用在User
对象上,用于验证请求体中的数据是否符合要求。
在Java Bean中使用@Valid
注解,需要在Java Bean的属性上添加该注解。下面是一个简单的示例,演示了如何在Java Bean中使用@Valid
注解。
public class User {
@NotBlank
private String name;
@NotBlank
private String password;
// 省略其他属性和方法
}
在上面的示例代码中,@Valid
注解被应用在name
和password
属性上,用于验证这两个属性的值是否符合要求。
本文介绍了Spring Boot中的两种输入数据验证方式:@Validated
和@Valid
。@Validated
注解主要用于验证方法参数,支持分组校验;@Valid
注解主要用于验证Java Bean对象的属性。使用这两种注解可以有效地保证输入数据的合法性,提高应用程序的健壮性和可靠性。
公众号请关注"果酱桑", 一起学习,一起进步!