読者です 読者をやめる 読者になる 読者になる

かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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にメッセージを集約できます。