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
、必須またはnullではないとしてマークされているフィールドを省略すると、次のバインディングエラー例外が発生します
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プロパティに注釈を使用していないため、検証されるべきではないことを期待していましたが、検証された場合でも、上記の例外/エラーを理解できません