public class ScanRegisterBean implements Serializable{
@Min(value = 1)
@Max(value = Long.MAX_VALUE)
private long id;
@NotBlank(groups = {ScanRegister.class, Register.class})
@Length(min = 2, max = 20,groups = {ScanRegister.class, Register.class})
private String nick;
@NotBlank(groups = {ScanRegister.class, Register.class})
@Phone(mode = 0,groups = {ScanRegister.class, Register.class})
private String phone;
@NotBlank(groups = {ScanRegister.class, Register.class})
@Length(min = 6, max = 20,groups = {ScanRegister.class, Register.class})
private String pwd;
@NotBlank(groups = {Register.class})
private String deviceId;
public interface ScanRegister {}
public interface Register{}
}
hibernate-validator 配置的是 快速失败,配置如下
@Configuration
public class HibernateConfig {
// 配置 hibernate 快速失败
@Bean
public Validator validator() {
ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
.configure()
.addProperty("hibernate.validator.fail_fast", "true")
.buildValidatorFactory();
Validator validator = validatorFactory.getValidator();
return validator;
}
}
有个问题就是,在校验的时候不能先把一个字段校验完毕,在校验下一个字段。
比如:
前端提交的时候,
nick, phone, pwd 都不填的时候, 会提示用户 nick 不能为空。然后再给nick赋值为 哈 的时候,再次提交,不会校验nick 的长度, 而是直接校验 phone,看phone是不是为空。怎么让hibernate 继续校验 nick 的长度,而不是直接校验Phone 是不是为空?
个人意见: 你说的那种累积性校验建议在前端做, 提交时高亮显示填充不完整/出错的. 而后端校验原则应该是尽早失败, 出错尽早返回, 而不是等第二个第三个错, 在后端做这个没有太大意义, 且性能体验不如在前端完成高效.