Spring 数据校验

引入包

org.springframework.boot:spring-boot-starter-validation

参数校验

@Getter
@Setter
@ToString
public class LoginVo { @NotBlank @Pattern(regexp = "\\d") private String id; @NotBlank private String password; } 

获得校验结果

方法1:Errors

import org.springframework.validation.Errors;
import org.springframework.validation.ObjectError;

@PostMapping("/login")
@ResponseBody public boolean doLogin(@Valid LoginVo vo, Errors errors) { for (ObjectError error : errors.getAllErrors()) { System.out.println(error); } if (errors.hasErrors()) { return false; } return loginService.login(vo); } 

方法2:异常处理器 (推荐)

@PostMapping("/login")
@ResponseBody
public boolean doLogin(@Valid LoginVo vo) { return loginService.login(vo); } 
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler { @ExceptionHandler(BindException.class) public List<ObjectError> validationHandler(BindException e) { return e.getAllErrors(); } } 

可用的校验约束

javax.validation.constraints

org.hibernate.validator.constraints

自定义校验

注解

将要添加到校验字段上的约束注解

@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {MobileValidator.class}) public @interface Mobile { boolean required() default true; String message() default "手机号码格式错误"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; } 

校验器

public class MobileValidator implements ConstraintValidator<Mobile, String> { /** * Pattern对象是线程安全的 * Instances of this class are immutable and are safe for use by multiple * concurrent threads. Instances of the {@link Matcher} class are not safe for * such use. * * 正则表达式来自网络 */ private static final Pattern MOBILE_PATTERN = Pattern.compile("^(13[0-9]|14[5-9]|15[0-3,5-9]|16[2,5,6,7]|17[0-8]|18[0-9]|19[0-3,5-9])\\d{8}$"); private boolean required = false; @Override public void initialize(Mobile constraintAnnotation) { this.required = constraintAnnotation.required(); } @Override public boolean isValid(String value, ConstraintValidatorContext context) { return valid(value, this.required); } public static boolean valid(String value, boolean required) { if (StringUtils.hasText(value)) { var matcher = MOBILE_PATTERN.matcher(value); return matcher.matches(); } else { return !required; } } } 

猜你喜欢

转载自www.cnblogs.com/1156184981651a/p/12790312.html