Spring Boot Validate 是 Spring Boot 框架中的一个重要功能,用于数据校验。以下是关于 Spring Boot Validate 的基础概念、优势、类型、应用场景以及常见问题及其解决方法。
Spring Boot Validate 主要基于 Java Bean Validation 规范(JSR 380),该规范定义了一套用于 Java 对象的约束注解。Spring Boot 通过集成 Hibernate Validator 实现了这些注解的具体功能。
@NotNull
、@Size
、@Pattern
等,满足常见的校验需求。@NotNull
、@Size
、@Pattern
、@Min
、@Max
等。import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
public class User {
@NotBlank(message = "用户名不能为空")
@Size(min = 3, max = 20, message = "用户名长度必须在3到20个字符之间")
private String username;
@NotBlank(message = "密码不能为空")
@Size(min = 6, max = 20, message = "密码长度必须在6到20个字符之间")
private String password;
// Getters and Setters
}
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@PostMapping("/register")
public String register(@Validated @RequestBody User user) {
// 处理注册逻辑
return "注册成功";
}
}
问题描述:当校验失败时,默认情况下会抛出 MethodArgumentNotValidException
异常。
解决方法:可以通过全局异常处理器捕获该异常,并返回友好的错误信息。
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import java.util.HashMap;
import java.util.Map;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) {
Map<String, String> errors = new HashMap<>();
ex.getBindingResult().getAllErrors().forEach((error) -> {
String fieldName = ((FieldError) error).getField();
String errorMessage = error.getDefaultMessage();
errors.put(fieldName, errorMessage);
});
return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
}
}
问题描述:有时需要根据业务需求自定义校验注解。
解决方法:可以通过实现 ConstraintValidator
接口来创建自定义校验注解。
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CustomValidator.class)
public @interface CustomValidation {
String message() default "自定义校验失败";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class CustomValidator implements ConstraintValidator<CustomValidation, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// 自定义校验逻辑
return value != null && value.startsWith("custom");
}
}
Spring Boot Validate 提供了一种便捷的方式来对数据进行校验,通过注解和内置的校验器,可以大大简化校验逻辑的编写。同时,通过自定义校验注解和全局异常处理,可以满足更复杂的业务需求。
领取专属 10元无门槛券
手把手带您无忧上云