Java SpringMVC:在同一个bean上使用不同的JSR-303验证器?

Java SpringMVC:在同一个bean上使用不同的JSR-303验证器?,java,spring,validation,spring-mvc,Java,Spring,Validation,Spring Mvc,我在SpringMVC控制器中的bean上使用约束验证器(JSR-303)。给定以下java bean: public class EntityDTO { protected Long id; protected Integer version; protected String someOtherField; // getters and setters } 我想执行两种不同类型的约束验证。id和version都是空的,或者都是非空的 我可以创建两个不同的

我在SpringMVC控制器中的bean上使用约束验证器(JSR-303)。给定以下java bean:

public class EntityDTO {

    protected Long id;
    protected Integer version;
    protected String someOtherField;

    // getters and setters
}
我想执行两种不同类型的约束验证。
id
version
都是空的,或者都是非空的

我可以创建两个不同的约束验证器并分配给两个不同的注释:
DTOEntityFieldsEmpty
&
dtoEntityFieldsNoEntry
。但是我必须在bean级别指定验证器注释

@DTOEntityFieldsEmpty
public class EntityDTO {
   ....
}    
但是,我希望指定我希望在实际控制器方法级别中使用的验证器。在正常情况下,我的方法是:

public void updateData( @RequestBody @Valid EntityDTO dto){
   ...
}
其中,
@Valid
注释将应用EntityDTO对象中定义的验证器。但是我想看看是否有一种方法可以在@Valid请求中传递参数,或者指定要使用的验证器

// @Valid annotation not supported this way
public void updateData( @RequestBody @Valid(validator=DTOEntityFieldsEmpty.class) EntityDTO dto){
   ...
}
我能做些什么来解决这个问题吗?我意识到我可以使用Spring的
@InitBinder
,但这会将验证器绑定到整个控制器,而不仅仅是一个特定的方法

我已经检查了JSR-303 1.0和1.1,没有发现任何东西会让我处理这种情况。同样,我在Spring3或Spring4文档中也找不到任何内容。我想知道是否有一种使用组验证的方法,但不完全确定。我需要知道哪个验证器在控制器中成功或失败,这对我来说似乎有点麻烦。

您可以使用。因此,您需要将字段中的约束分配给组,然后告诉spring要验证哪个组(可以是一个或多个组)


检查注释和注释。谢谢。这正是我刚才想做的;不过我还没有测试过。
public interface GroupA { }  //empty marker interface
public interface GroupB { }


@DTOEntityFieldsEmpty(groups=GroupA.class)
@DTOEntityFieldsNotEmpty(groups=GroupB.class)
public class EntityDTO {
    ....
} 


public void updateData(
       @RequestBody @Validated({ GroupA.class }) EntityDTO dto){
   ...
}