-1

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

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

}

在我的AddressFormbean 中,我使用 Bean 验证注释来验证数据,但我没有在我的 for中使用任何@Valid注释。这是我的 Controller 方法的签名PaymentDetailsFormbillingAddress

public String createUpdatePaymentInfos(final Model model,
@ModelAttribute("paymentInfo") @Valid final PaymentDetailsForm form, final BindingResult bindingResult)
{
}

如果我从表单发送正确的数据,一切工作正常,但如果我省略任何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 属性使用注释,因此不应该对其进行验证,但即使它得到验证,我也无法理解上述异常/错误

4

2 回答 2

0

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

于 2012-12-13T19:04:13.530 回答
0

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

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

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

于 2012-12-13T19:46:35.927 回答