【问题标题】:Thymeleaf JPA error validation using VO's使用 VO 的 Thymeleaf JPA 错误验证
【发布时间】:2016-09-19 12:51:45
【问题描述】:

我正在将 thymeleaf+sprinboot 用于 Web 应用程序,我想知道在使用值对象 (VO) 时如何控制验证错误。

如您所见,实体对一个属性有一个约束(唯一):

@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 时,如何在视图上显示验证错误?

【问题讨论】:

    标签: validation spring-boot thymeleaf bean-validation


    【解决方案1】:

    你真的只有一个选择。从 Hibernate/DB 中捕获有关重复值的异常并在 BindingResult 中填充任何额外的错误。

    执行查询会引入竞争条件。如果 2 个用户尝试在大致相同的时间输入相同的值,则两个验证都可以通过(因为数据库中还没有值),其中一个将在稍后失败,因为只有一个事务能够成功。

    当您捕获异常时,您可以使用包含字段名称和错误消息的FieldError 调用BindingResult.addError

    【讨论】:

      猜你喜欢
      • 2017-05-21
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多