Validation 使用VO';s
我正在为一个web应用程序使用thymeleaf+sprinboot,我想知道在使用值对象(VO)时如何控制验证错误 如您所见,实体对一个属性具有约束(唯一):Validation 使用VO';s,validation,spring-boot,thymeleaf,bean-validation,Validation,Spring Boot,Thymeleaf,Bean Validation,我正在为一个web应用程序使用thymeleaf+sprinboot,我想知道在使用值对象(VO)时如何控制验证错误 如您所见,实体对一个属性具有约束(唯一): @Entity public class Company { @Id @GeneratedValue Integer id = 0; @Column(unique = true) String code; String name; String address; ... } 但
@Entity
public class Company {
@Id
@GeneratedValue
Integer id = 0;
@Column(unique = true)
String code;
String name;
String address;
...
}
但VO不打算拥有它:
public class CompanyVO {
Integer id = 0;
String code;
String name;
String address;
...
}
因此,控制器无法验证该值是否重复或唯一:
@RequestMapping(method = RequestMethod.POST)
public String set(@Valid CompanyVO companyVO, BindingResult result, Model model){
Company company = new Company();
if(result.hasErrors()){
return "company";
}
if(companyVO.getId() != 0){
company = companyRepository.findOne(companyVO.getId());
}
mapper.map(companyVO, company);
companyRepository.save(company);
return "redirect:/companies";
}
当我使用VO时,如何在视图上显示验证错误?您实际上只有一个选项。从Hibernate/DB捕获关于重复值的异常,并在BindingResult中填充任何额外错误 执行查询会引入竞争条件。如果两个用户尝试在大致相同的时间输入相同的值,两个验证都可以通过(因为数据库中还没有值),其中一个稍后将失败,因为只有一个事务能够成功
捕获异常时,可以使用包含字段名和错误消息的
FieldError
调用BindingResult.addError
。您实际上只有一个选项。从Hibernate/DB捕获关于重复值的异常,并在BindingResult中填充任何额外错误
执行查询会引入竞争条件。如果两个用户尝试在大致相同的时间输入相同的值,两个验证都可以通过(因为数据库中还没有值),其中一个稍后将失败,因为只有一个事务能够成功
捕获异常时,可以使用包含字段名和错误消息的FieldError
调用BindingResult.addError