Spring-MVC bean验证类型mismtach错误

时间:2012-12-13 18:22:04

标签: spring spring-mvc bean-validation

我正在尝试使用Spring JSR303验证来验证对象,我有一个表单对象,其中包含一些嵌套对象以及一些表单属性,这是我的表单签名

public class PaymentDetailsForm
{
  private AddressForm billingAddress;
  // other properties and getter and setters

}

在我的AddressForm bean中,我使用了Bean验证注释来验证数据,但我没有在@Valid PaymentDetailsForm内使用任何billingAddress注释public String createUpdatePaymentInfos(final Model model, @ModelAttribute("paymentInfo") @Valid final PaymentDetailsForm form, final BindingResult bindingResult) { } 。 这是我的Controller方法的签名

billingAddress

如果我从表单发送正确的数据,一切正常,但是如果我省略org.springframework.validation.BeanPropertyBindingResult: 1 errors Field error in object 'paymentInfo' on field 'billingAddress': rejected value [com.xxx.storefront.forms.AddressForm@e39f6f1,true]; codes [typeMismatch.paymentInfo.billingAddress,typeMismatch.billingAddress,typeMismatch.com.xxx.storefront.forms.AddressForm,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [paymentInfo.billingAddress,billingAddress]; arguments []; default message [billingAddress]]; default message [Failed to convert property value of type 'java.lang.String[]' to required type 'com.xxx.storefront.forms.AddressForm' for property 'billingAddress'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String[]] to required type [com.xxx.storefront.forms.AddressForm] for property 'billingAddress': no matching editors or conversion strategy found] 中标记为必需或非空的任何字段,则会出现以下绑定错误异常

@valid

由于我没有对billingAddress属性使用{{1}}注释,所以我没想到它,但是即使它得到验证我也无法理解上面提到的异常/错误

2 个答案:

答案 0 :(得分:0)

您看到的bindingResult看起来不像是因为验证错误,可能是因为绑定错误 - 无法将UI字段绑定到内部billingAddress字段。即使是绑定错误最终也会出现在紧随其后的bindresult参数中,就像你所看到的那样。

答案 1 :(得分:0)

这是由于来自UI的一些错误的映射,在我的JSP页面中,我将地址字段映射到billingAddress对象,但是有一个隐藏字段,如

<form:hidden path="billingAddress" id="billingAddress"/> 

这是错误的原因,因为它试图发送String数组并且Spring绑定无法区分我正在尝试做什么