SpringBoot参数校验@Valid 和 @Validated注解使用详解
@Valid
和 @Validated
是两个在Spring Boot中用于参数验证的注解。@Valid
来自于javax.validation
包,而@Validated
是org.springframework.validation.annotation.Validated
的简写,是Spring提供的校验机制。
@Valid
@Valid
是 JSR-303 标准的一部分,通过注释表明对关联的对象进行约束验证。需要注意的是,@Valid
只能用于校验支持的类型。
使用示例:
import javax.validation.Valid;
public class User {
@NotNull(message = "姓名不能为空")
private String name;
@Min(value = 18, message = "年龄必须大于等于18岁")
private int age;
// getters and setters
}
@RestController
public class UserController {
@PostMapping("/user")
public ResponseEntity<?> createUser(@Valid @RequestBody User user, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
// 处理错误信息
}
// 其他代码
}
}
@Validated
@Validated
是@Valid
的一个变体,提供了更多的功能,例如分组验证、注解的组合等。
使用示例:
import org.springframework.validation.annotation.Validated;
@Validated
@RestController
public class UserController {
@PostMapping("/user")
public ResponseEntity<?> createUser(@Validated @RequestBody User user) {
if (bindingResult.hasErrors()) {
// 处理错误信息
}
// 其他代码
}
}
在使用@Validated
时,可以在类级别指定分组,然后在验证方法参数时指定要使用的分组。
public interface Check {
}
public interface Change {
}
public class User {
@NotNull(message = "姓名不能为空", groups = Check.class)
@Null(message = "不能修改姓名", groups = Change.class)
private String name;
// getters and setters
}
@RestController
public class UserController {
@PostMapping("/user")
public ResponseEntity<?> createUser(@Validated(Check.class) @RequestBody User user) {
// 处理代码
}
@PutMapping("/user")
public ResponseEntity<?> updateUser(@Validated(Change.class) @RequestBody User user) {
// 处理代码
}
}
总结:@Valid
是一个通用的JSR-303验证注解,而 @Validated
是Spring提供的注解,提供了更多的功能,如分组验证和注解组合。在使用时,可以根据具体需求选择合适的注解。
评论已关闭