web-dev-qa-db-ja.com

Spring BootおよびThymeleafで検証が機能しない

フォームを表示する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はオブジェクトが有効ではないことに気付いているようですが、フォームが再び表示されないため、ユーザーは間違いを修正できます。私は何を間違えていますか?

21
Wim Deblauwe

こちらのチュートリアル による答えが見つかりました。メソッドのシグネチャを次から変更する必要があります。

public String doRegistration( @Valid CustomerLicenseRegistration customerLicenseRegistration, 
Model model, 
BindingResult bindingResult )

に:

public String doRegistration( @Valid CustomerLicenseRegistration customerLicenseRegistration, 
BindingResult bindingResult, 
Model model )

@Validで注釈を付けたオブジェクトの直後にBindingResultである必要があることに注意してください

62
Wim Deblauwe

私の場合、入力ボックスへの入力が間違っていました。実際に私は"-"に特殊文字を入力しました入力ボックスこれは同じエラーをスローします-object = 'events'の検証に失敗しました。エラー数:5 =。 数値/文字列の値を入力して解決しました。

0
Abhishek Singh