如何使用Hibernate Validator(JSR 303)在Spring Controller方法中验证两个或更多bean

时间:2011-11-30 21:10:16

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

我有两个班(豆)

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。我怎样才能做到这一点? 感谢:D 谢谢:D

1 个答案:

答案 0 :(得分:0)

在尝试使用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 Spring

@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

感谢