下面是关于“Spring Boot使用Hibernate Validator校验方式”的完整攻略,包括使用示例:
1. 什么是Hibernate Validator
Hibernate Validator是实现Java Bean Validation规范的一个开源的验证框架。它减少了一些重复的校验代码的编写,并提供了一个标准化的验证方式,可以在不同的Bean Validation API中使用。
2. Spring Boot中使用Hibernate Validator
2.1 添加依赖
Spring Boot默认已经集成了Hibernate Validator,只需要在pom.xml中添加如下依赖即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2.2 添加校验注解
在Java Bean字段上添加Hibernate Validator的注解,来指定具体的校验规则。例如:
public class User {
@NotBlank(message = "用户名不能为空")
private String name;
@Min(value = 18, message = "年龄必须大于等于18岁")
private Integer age;
}
2.3 开启校验
可以在Spring Boot应用程序的入口处(通常是Application类)添加@Validated注解,来开启校验功能。例如:
@RestController
@Validated
public class UserController {
@PostMapping("/user")
public User createUser(@RequestBody @Valid User user) {
return user;
}
}
在上述例子中,@Validated注解标注了RestController,那么所有在该类中使用@Valid注解的地方都将进行校验。
2.4 自定义错误返回
在控制类中可以使用@ExceptionHandler注解来处理抛出的验证错误异常BindException,如下所示:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(BindException.class)
public Map<String, String> handlerBindException(BindException e) {
Map<String, String> errorMap = new HashMap<>();
List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
for (FieldError error : fieldErrors) {
errorMap.put(error.getField(), error.getDefaultMessage());
}
return errorMap;
}
}
2.5 示例1
代码如下:
@RestController
@Validated
public class UserController {
@PostMapping("/user")
public User createUser(@RequestBody @Valid User user) {
return user;
}
@GetMapping("/user/{id}")
public User findUserById(@PathVariable @Min(1) Integer id) {
User user = new User();
user.setId(id);
user.setName("Tom");
user.setAge(20);
return user;
}
}
在上述代码中,UserController中创建用户与查询用户的方法都对输入参数进行了校验。
2.6 示例2
使用自定义错误返回对上述示例进行改造:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(BindException.class)
public Map<String, String> handlerBindException(BindException e) {
Map<String, String> errorMap = new HashMap<>();
List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
for (FieldError error : fieldErrors) {
errorMap.put(error.getField(), error.getDefaultMessage());
}
return errorMap;
}
}
@RestController
@Validated
public class UserController {
@PostMapping("/user")
public User createUser(@RequestBody @Valid User user) {
return user;
}
@GetMapping("/user/{id}")
public User findUserById(@PathVariable @Min(1) Integer id) {
User user = new User();
user.setId(id);
user.setName("Tom");
user.setAge(20);
return user;
}
}
在上述改造中,当校验失败时,全局异常处理类将返回一个Map类型的错误信息。
至此,Spring Boot使用Hibernate Validator校验的完整攻略介绍完毕。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot使用hibernate validator校验方式 - Python技术站