我正在尝试使用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}}注释,所以我没想到它,但是即使它得到验证我也无法理解上面提到的异常/错误
答案 0 :(得分:0)
您看到的bindingResult看起来不像是因为验证错误,可能是因为绑定错误 - 无法将UI字段绑定到内部billingAddress字段。即使是绑定错误最终也会出现在紧随其后的bindresult参数中,就像你所看到的那样。
答案 1 :(得分:0)
这是由于来自UI的一些错误的映射,在我的JSP页面中,我将地址字段映射到billingAddress
对象,但是有一个隐藏字段,如
<form:hidden path="billingAddress" id="billingAddress"/>
这是错误的原因,因为它试图发送String数组并且Spring绑定无法区分我正在尝试做什么