我正在尝试使用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。
任何人都可以帮助我,让我知道我做错了什么吗?已经玩了一段时间而无法让它发挥作用。
由于
答案 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;
现在可以正常使用。
唯一的缺点是,由于这些是我的表格支持对象,因此最初会在字段中显示零而不是空白。
我不确定是否有办法解决这个问题?