Spring中的条件验证

我有一个包含一些单选按钮和复选框的表单.每当用户选择/取消选择单选按钮或复选框时,几乎没有其他输入字段被启用/禁用.
我想仅为用户提交表单时启用的字段添加验证.提交时禁用的字段不应被视为验证.

我不想在客户端验证中添加它.是否有更好/更简单的方法在Spring 3.0中实现条件验证,而不是在验证器中添加多个if?

谢谢!

最佳答案
如果您使用JSR 303 Bean验证,那么您可以使用validation groups(组).

假设您有此用户输入,包含两个部分.
两个布尔值表示部分是启用还是禁用. (当然你可以使用比@NotNull更有用的注释)

public class UserInput {
   boolean sectionAEnabled;
   boolean sectionBEnabled;

   @NotNull(groups=SectionA.class)
   String someSectionAInput;

   @NotNull(groups=SectionA.class)
   String someOtherSectionAInput;

   @NotNull(groups=SectionB.class)
   String someSectionBInput;

   Getter and Setter
}

组需要两个接口.它们只作为标记.

public interface SectionA{}

public interface SectionB{}

Since Spring 3.1您可以在控制器方法中使用Spring @Validated注释(而不是@Validate)来触发验证:

@RequestMapping...
public void controllerMethod(
         @Validated({SectionGroupA.class}) UserInput userInput,BindingResult binding,...){...}

在Spring 3.1之前,没有办法指定应该用于验证的验证组(因为@Validated不存在且@Validate没有组属性),所以你需要通过手写代码开始验证:这是一个在Spring 3.0中启用了如何根据女巫部分触发验证的示例.

@RequestMapping...
public void controllerMethod(UserInput userInput,...){

  ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
  Validator validator = factory.getValidator();

  List

(顺便说一句:对于Spring 3.0解决方案,也可以让Spring注入验证器:

@Inject javax.validation.Validator validator

)

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...