フォームを表示する1つのコントローラーを備えたSpring Bootアプリケーション(バージョン1.2.3を使用)があります。これはすべて正常に機能しますが、ここで検証を追加したいと思います。私のコントローラーにこのメソッドがあります:
@RequestMapping(value = "/licensing", method = RequestMethod.POST)
public String doRegistration( @Valid CustomerLicenseRegistration customerLicenseRegistration, Model model, BindingResult bindingResult )
{
if( bindingResult.hasErrors())
{
logger.debug( "There are errors! {}", bindingResult );
return "customer/license-registration";
}
logger.debug( "customerLicenseRegistration: " + customerLicenseRegistration );
CustomerLicense customerLicense = m_licenseService.createCustomerLicense( customerLicenseRegistration );
model.addAttribute( "customerLicense", customerLicense );
return "customer/license-registration-done";
}
無効なものを入力すると、送信後に「ホワイトラベルエラーページ」が表示され、メソッド内のブレークポイントにヒットすることはありません(@Valid
注釈、ブレークポイントがヒットします)。エラーページには以下が表示されます。
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Mon May 18 09:42:27 CEST 2015
There was an unexpected error (type=Bad Request, status=400).
Validation failed for object='customerLicenseRegistration'. Error count: 1
Springはオブジェクトが有効ではないことに気付いているようですが、フォームが再び表示されないため、ユーザーは間違いを修正できます。私は何を間違えていますか?
こちらのチュートリアル による答えが見つかりました。メソッドのシグネチャを次から変更する必要があります。
public String doRegistration( @Valid CustomerLicenseRegistration customerLicenseRegistration,
Model model,
BindingResult bindingResult )
に:
public String doRegistration( @Valid CustomerLicenseRegistration customerLicenseRegistration,
BindingResult bindingResult,
Model model )
@Valid
で注釈を付けたオブジェクトの直後にBindingResult
がである必要があることに注意してください。
私の場合、入力ボックスへの入力が間違っていました。実際に私は"-"に特殊文字を入力しました入力ボックスこれは同じエラーをスローします-object = 'events'の検証に失敗しました。エラー数:5 =。 数値/文字列の値を入力して解決しました。