かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Spring BootでバリデーションのメッセージをValidationMessages.properties以外にする

Spring Bootはデフォルトで検証エラーのメッセージをValidationMessages.propertiesから取得します。これを変えたい!って思ったら以下のようにします。

手順としては

  • LocalValidatorFactoryBeanを作成する
    • messageSourceを任意のものにする
  • WebMvcAutoConfigurationAdapterのaddValidatorで上のLocalValidatorFactoryBeanを返す

コードとしては以下のような感じになります。

package okazuki.validationEdu;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;

@SpringBootApplication
public class App extends WebMvcAutoConfigurationAdapter {
    
    @Autowired
    MessageSource messageSource;
    
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

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

これでmessages.propertiesにメッセージを集約できます。