我正在尝试使用 Spring JSR303 验证来验证对象,我有一个表单对象,其中包含一些嵌套对象以及一些表单属性,这是我的表单签名
public class PaymentDetailsForm
{
private AddressForm billingAddress;
// other properties and getter and setters
}
在我的AddressForm
bean 中,我使用 Bean 验证注释来验证数据,但我没有在我的 for中使用任何@Valid
注释。这是我的 Controller 方法的签名PaymentDetailsForm
billingAddress
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 属性使用注释,因此不应该对其进行验证,但即使它得到验证,我也无法理解上述异常/错误