下面是 SpringBoot 使用 hibernate validator 校验的完整攻略。
简介
SpringBoot 使用 hibernate validator 校验实现了一种基于注解的 JavaBean 验证方法,并将其整合到了 SpringBoot 框架中。使用 hibernate validator 校验,可以有效地避免数据在后台处理时出现异常,提高系统的可用性。
环境配置
在项目中加入以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
以上依赖项会将 Validator 和 JSR303 标准 API 引入项目中,可以使用相关注解进行校验。
校验方法
使用 hibernate validator 校验时,需要在 JavaBean 上使用注解进行标记。以以下示例 JavaBean 为例:
public class User {
@NotNull
private Integer id;
@NotBlank
private String name;
@Email
private String email;
//getter和setter方法省略
}
其中,@NotNull
表示该字段不能为 null,@NotBlank
表示该字段不能为 null 或空白字符串,@Email
表示该字段必须是一个合法的电子邮件地址。
在代码中需要进行校验的地方进行注入 javax.validation.Validator
并使用其 validate
方法进行校验,如下所示:
@PostMapping("/user")
public ResponseEntity<User> createUser(@RequestBody User user) {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<User>> violations = validator.validate(user);
if (violations.isEmpty()) {
// 校验通过,进行用户创建
} else {
// 校验不通过,返回错误信息
}
}
在校验时,也可以使用@Valid
或@Validated
注解对参数进行标记,让 Validator 自动检索 JavaBean 中的校验注解,如下所示:
@PostMapping("/user")
public ResponseEntity<User> createUser(@RequestBody @Valid User user) {
// 创建用户
}
示例
下面给出两个校验示例:
示例一
一个简单的用户注册的校验示例,要求用户名和密码不能为空。
public class User {
@NotBlank(message = "用户名不能为空")
private String username;
@NotBlank(message = "密码不能为空")
private String password;
//getter和setter方法省略
}
@RestController
@RequestMapping("/register")
public class UserController {
@PostMapping
public String register(@Valid @RequestBody User user, BindingResult result) {
if (result.hasErrors()) {
return result.getAllErrors().get(0).getDefaultMessage();
}
return "注册成功!";
}
}
示例二
一个较为复杂的校验示例,要求用户的年龄必须在 18 到 60 岁之间,邮箱必须是合法的邮箱格式。
public class User {
private String username;
@Min(value = 18, message = "年龄必须大于 18 岁")
@Max(value = 60, message = "年龄必须小于 60 岁")
private int age;
@Email(message = "邮箱格式不正确")
private String email;
//getter和setter方法省略
}
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping
public String addUser(@Valid @RequestBody User user, BindingResult result) {
if (result.hasErrors()) {
return result.getAllErrors().get(0).getDefaultMessage();
}
return "添加成功!";
}
}
总结
Hibernate validator 是使用相对简单的校验框架,可以快速实现 JavaBean 的校验,而 SpringBoot 提供了非常强大的依赖注入和自动配置功能,使得 hibernate validator 校验的配置和使用变得十分容易。如果您的应用程序需要对输入数据进行验证,SpringBoot + hibernate validator 组合是十分值得推荐的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot 使用hibernate validator校验 - Python技术站