SpringBoot 参数验证的几种方式
Spring Boot 支持多种参数验证方式,以下是几种常见的方法:
使用
@Validated
注解:在Controller类中,可以使用
@Validated
注解来指定验证组,实现参数验证。
@RestController
@RequestMapping("/users")
@Validated
public class UserController {
@PostMapping
public ResponseEntity<?> createUser(@Valid @RequestBody User user, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
// 处理验证错误
}
// 创建用户逻辑
}
}
使用
@Valid
注解:JSR-303规范的
@Valid
注解可以被用于递归地验证对象的所有字段,包括其包含的对象。
@PostMapping("/users")
public ResponseEntity<?> createUser(@Valid @RequestBody User user, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
// 处理验证错误
}
// 创建用户逻辑
}
使用
@ControllerAdvice
和@ExceptionHandler
处理验证错误:可以创建一个全局异常处理器,捕获
MethodArgumentNotValidException
异常,并返回自定义的错误响应。
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, Object>> handleValidationExceptions(MethodArgumentNotValidException ex) {
Map<String, Object> body = new LinkedHashMap<>();
body.put("error", "Validation failed");
body.put("message", ex.getBindingResult().getAllErrors().get(0).getDefaultMessage());
return new ResponseEntity<>(body, HttpStatus.BAD_REQUEST);
}
}
使用
javax.validation
注解:在实体类的字段上使用JSR-303或JSR-380注解来指定验证规则。
public class User {
@NotNull(message = "The name cannot be null")
@Size(min = 2, max = 30)
private String name;
@Email(message = "The email should be a valid email address")
private String email;
// getters and setters
}
使用
DataBinder
手动绑定和验证:在Controller方法中,可以使用
DataBinder
手动进行数据绑定和验证。
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setValidator(myValidator());
}
@PostMapping("/users")
public ResponseEntity<?> createUser(@RequestBody User user) {
BindingResult bindingResult = new BeanPropertyBindingResult(user, "user")
评论已关闭