Spring中没有捕获BindingResult中的javax.validation注释

时间:2011-04-25 17:40:16

标签: java hibernate spring validation bean-validation

我正在尝试使用javax.validation注释向我的模型对象(它作为我的表单支持bean)添加验证。

我的模型看起来像这样:

public Class TestObject {
    private String myProp;
    private InnerObject innerObject;

    //getters and setters omitted
}

public Class InnerObject {
  private BigDecimal myValue;

  @NotNull
  public BigDecimal getMyValue();
}

在我的控制器中,我有这样的方法调用:

public View calculate(@ModelAttribute("testObject") @Valid TestObject testObject, BindingResult result)

我的spring-servlet.xml文件中也有<mvc:annotation-driven/>

每次我运行带有空值的表单时,它都会告诉我有0个绑定结果错误。

我在类路径中使用带有Hibernate-Validator-4.2.0和Validation-API-1.0.0的Java 1.6。

任何人都可以帮助我,让我知道我做错了什么吗?已经玩了一段时间而无法让它发挥作用。

由于

3 个答案:

答案 0 :(得分:0)

您没有引用InnerObject类。您的控制器正在使用TestObject,但TestObject类的字段“innerObject”的类型为String。

答案 1 :(得分:0)

好的,稍微进一步了解一下。我注意到我仍然在我的控制器中使用自定义验证器,如下所示:

binder.setValidator(new CustomValidator());

所以我删除了它,然后我在内部对象的getter上面添加了@Valid,如:

@Valid
public InnerObject getInnerObject();

现在我可以看到代码中存在绑定错误。我有一个新问题。我在BigDecimal属性上有@NotNull,我收到以下错误

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.validation.UnexpectedTypeException: No validator could be found for type: java.math.BigDecimal

从文档中看起来支持BigDecimal。所以不确定发生了什么。想想我越来越近了。

答案 2 :(得分:0)

好的解决我改变的BigDecimal错误:

private BigDecimal myField;

private BigDecimal myFeild = BigDecimal.Zero;

现在可以正常使用。

唯一的缺点是,由于这些是我的表格支持对象,因此最初会在字段中显示零而不是空白。

我不确定是否有办法解决这个问题?