Bean验证多个属性节点

问题描述:

我正在使用bean验证1.1,我想验证一个bean(在类级别)并向用户添加多个字段的反馈。Bean验证多个属性节点

高水平什么我想要实现(省略可读性代码)

@RequestCheck 
public class Request { 
    private String param1; 
    private String param2; 
    private String param3; 
} 

public class RequestCheckValidator implements ConstraintValidator<RequestCheck, Request> { 
    //... 
    public boolean isValid(final Request request, final ConstraintValidatorContext context) { 
     if (request.param1 != null || request.param2 != null || request.param3 != null) 
      context.disableDefaultConstraintViolation(); 
      final ConstraintViolationBuilder violationBuilder = context.buildConstraintViolationWithTemplate("There are missing parameters."); 
      if (request.param1 == null) { 
       valid = false; 
       violationBuilder.addPropertyNode("param1"); 
      } 
      if (request.param2() == null) { 
       valid = false; 
       violationBuilder.addPropertyNode("param2"); 
      } 
      if (request.param3() == null) { 
       valid = false; 
       violationBuilder.addPropertyNode("param3"); 
      } 
      violationBuilder.addConstraintViolation(); 
      //return ... 
     } 
    } 

的问题是,增加第二addProperyNode("...")抛出一个空指针。 当验证适用于课程时,您如何正确地向反馈添加额外的参数?

- 编辑 - 为了表达清楚:我需要这个注解在类级别,因为验证取决于字段的组合。他们需要所有人都在场,或者他们都不得在场。

在此先感谢!

+0

为什么在春天没有使用只是简单的注解为bean的领域验证? – Afridi

+0

因为他们互相依赖。有一些字段都需要存在或不存在 –

+0

Spring的JSR3验证支持跨域验证。无需重新发明*。 – StanislavL

确定这实际上是很容易的,你只需要创建每违反建设者:

context.buildConstraintViolationWithTemplate("if a parameter is supplied, please provide all parametes. param1 is Missing") 
       .addPropertyNode("param1") 
       .addConstraintViolation();