2017-01-09 41 views
1

私はjavax.validation.constraints.AssertTrueアノテーションをSpring MVCプロジェクト(SpringBoot 1.4.2)のフォームオブジェクトに使用しています。Springの検証@AssertTrueカスタムエラーコード/メッセージ

私のクラスは、次のようになります。

public class CommandForm { 

    @NotEmpty 
    @Email 
    private String email; 

    // ... 

    @AssertTrue(message="{error.my.custom.message}") 
    public boolean isValid(){ 
     // validate fields 
    } 
} 

方法isValid正しく呼び出され、検証プロセスが正常に動作しますが、私のカスタムエラーコードが正しく解決されていません。

私のmessage.propertiesファイルにerror.my.custom.messageフィールドがありますが、検証が失敗した場合、解決されたメッセージの代わりに"{error.my.custom.message}"文字列がエラーメッセージとして表示されます。

私のコードで何が問題になっていますか?これは、カスタムエラーコードを設定する正しい構文ですか?

答えて

0

私はデバッグの少し後に解決策を見つけました。

カスタムメッセージを設定する最も簡単な方法は、message.propertiesAssertTrue.commandForm.validフィールドを定義することでした。

アノテーションにmessage引数を設定する必要はありません。

0

唯一の問題は、Java Validation API (JSR-303)がデフォルトでValidationMessages.properties/resources)という名前のファイルからこれらのメッセージを読み込むことです。

その名前のファイルを作成し、そこにメッセージを移動してから、もう一度やり直してください。それは動作するはずです!

注:ファイル名を変更することはできますが、「規則に従って」という名前が付けられています。

1
ValidationMessages.propertiesファイル にあなたのメッセージを移動したり、次のようにカスタムは、スプリングによってロードされます message.properties作るためにあなたの WebMvcConfigurerAdaptergetValidator()メソッドをオーバーライド

import org.springframework.context.MessageSource; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.support.ResourceBundleMessageSource; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.validation.Validator; 
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 

@Configuration 
public class WebController extends WebMvcConfigurerAdapter { 

    @Override 
    public Validator getValidator() { 
     LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); 
     validator.setValidationMessageSource(messageSource()); 
     return validator; 
    } 

    @Bean(name = "messageSource") 
    public MessageSource messageSource() { 
     ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); 
     messageSource.setBasename("message"); 
     messageSource.setDefaultEncoding("UTF-8"); 
     return messageSource; 
    } 

} 
関連する問題