【问题标题】:How to validate two or more beans in a Spring Controller method with Hibernate Validator (JSR 303)如何使用 Hibernate Validator (JSR 303) 在 Spring Controller 方法中验证两个或多个 bean
【发布时间】:2011-11-30 21:10:16
【问题描述】:

我有两个类(Beans)

public class BeanOne {
  @Min(1)
  private Integer idBeanOne;
  @NotBlank
  private String  nameBeanOne;
  @NotNull
  @Min(1)
  private Integer idOther;
  // ... Getters and Setters
}

public class BeanTwo {
  @Min(1)
  private Integer idBeanTwo;
  @NotBlank
  private String  nameBeanTwo;
  @NotNull
  @Min(1)
  private Integer idOtherTwo;
  // ... Getters and Setters
}

Spring的控制器

// Method in Controller
@RequestMapping(value = "/name.html", method = RequestMethod.POST)
public @ResponseBody
Map<String, Object> submitInsert(@Valid BeanOne one,
    @Valid BeanTwo two, BindingResult result) {

  if (result.hasErrors()) {
    // Errores
  } else {
    // :D
  }
}

有什么方法可以验证两个或多个 bean?我已经成功验证了一个 bean,但是我没有成功验证两个或更多 bean。我怎样才能做到这一点? 感谢:D 谢谢:D

【问题讨论】:

    标签: java spring-mvc bean-validation hibernate-validator


    【解决方案1】:

    在多次尝试使用 JSR303 验证两个或多个 bean 之后,来到这个解决方案。

    public class BeanOne {
      @Valid
      private BeanTwo beanTwo;
      // other beans to validate
      @Valid
      private BeanN beanN;
    
      @Min(1)
      private Integer idBeanOne;
      @NotBlank
      private String  nameBeanOne;
      @NotNull
      @Min(1)
      private Integer idOther;
      // ... Getters and Setters
    }
    
    public class BeanTwo {
      @Min(1)
      private Integer idBeanTwo;
      @NotBlank
      private String  nameBeanTwo;
      @NotNull
      @Min(1)
      private Integer idOtherTwo;
      // ... Getters and Setters
    }
    

    // 控制器弹簧

    @Controller
    public class XController {
    
      @Autowired
      private Validator validator;
    
      @RequestMapping(value = "/name.html", method = RequestMethod.POST)
      public @ResponseBody Map<String, Object> 
         submitInsert(BeanOne beanOne, BeanTwo beanTwo, BindingResult  result) {
    
        beanOne.setBeanTwo(beanTwo);
        // beanOne.setBeabN(beanN);
        validator.validate(beanOne, result);
    
        if (result.hasErrors()) {
          // Errores
        } else {
          // :D
        }
      }
      // more code ...
    }
    

    但现在我有另一个问题:(

    我有这个文件 Messages.properties

    typeMismatch.java.lang.Integer = Must specify an integer value. 
    typeMismatch.java.lang.Long = Must specify an integer value. 
    typeMismatch.java.lang.Float = Must specify a decimal value. 
    typeMismatch.java.lang.Double=Must specify a decimal value.
    

    这个文件帮助我捕捉异常,当一个字段需要一个数字,并且用户输入文本时

    这对于第一个 bean (BeanOne) 非常有效,但不适用于嵌套 bean (BeanTwo, BeanN)

    我希望他们能帮助我:D

    谢谢

    【讨论】:

      猜你喜欢
      • 2013-11-23
      • 2011-07-24
      • 2010-12-30
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      相关资源
      最近更新 更多