56100


タイトル通りですが例えばデフォルトのバリデーション用メッセージファイルである`ValidationMessages.properties`にjava(Spring
boot)からアクセスする際下記のように書くと思います。  
※上記ファイルには`app.validation.NotNull = 必須項目`と書いてあったとします。

`@NotNull(message = {"app.validation.NotNull"})`

これでアクセス出来て居るはずですが引数を渡す場合どうすればいいでしょうか？

例えば`app.validation.NotNull = {0}`となっている場合`{0}`の部分に引数を渡せますよね？  
ここに渡す場合は`{""}`形式では駄目なのでしょうか？  
そもそも基本的な事ですが`ValidationMessages.properties`と普通のメッセージファイルである`messages.properties`にアクセスするには同じDIした`MessageSource`型のオブジェクトを使うという認識でよろしいでしょうか？


CC BY-SA 4.0
2019-06-25T06:39:08.120
56083
2019-06-26T01:55:12.520
15607
question
java spring-boot
Java & Spring boot2 でValidationMessages.propertiesにアクセスする際、message.getMessage(...)と{}の違いは？


  * [3\. Validation, Data Binding, and Type Conversion](https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation) \- Spring Framework Core reference

「Spring Bootでは Bean Validationを利用可能です」、これを別の視点で言い換えると、「(Spring-wayでなく)Bean
Validationの仕様に則ってvalidationを実装する必要があります」ということになります。  
メッセージをSpring Bootでは一般的な `messages.properties` でなく
`ValidationMessages.properties` に書く必要があるのも、Bean
Validationの仕様でそう決まっているからです([5.3.1. Default message
interpolation](https://beanvalidation.org/1.1/spec/#default-messageresolver))。

質問文から行いたいことがどういうことか正確に理解できなかったのですが、まさに上のリンク先だったり、あるいはHibernate
Validatorのリファレンス [4.1.3.
Examples](https://docs.jboss.org/hibernate/stable/validator/reference/en-
US/html_single/#_examples)に、より具体的なmessageの使用例がありますが、これで疑問は解決するでしょうか？

* * *

>
> そもそも基本的な事ですが`ValidationMessages.properties`と普通のメッセージファイルである`messages.properties`にアクセスするには同じDIした`MessageSource`型のオブジェクトを使うという認識でよろしいでしょうか？

デフォルトでは異なります。同じにすることは可能です。

[LocalValidatorFactoryBean#setValidationMessageSource](https://docs.spring.io/spring-
framework/docs/current/javadoc-
api/org/springframework/validation/beanvalidation/LocalValidatorFactoryBean.html#setValidationMessageSource-
org.springframework.context.MessageSource-):

> Specify a custom Spring MessageSource for resolving validation messages,
> **instead of relying on JSR-303's default "ValidationMessages.properties"
> bundle** in the classpath. **This may refer to a Spring context's shared
> "messageSource" bean** , or to some special MessageSource setup for
> validation purposes only.

このあたりのことを調べたときのメモをQiitaに残しています。

  * [Spring Validator(でラップされたBean Validation)のメッセージをi18nしたときの覚え書き](https://qiita.com/yukihane/items/94686d7dd3595701b186)

もはや書いた本人も一瞥しただけでは何が言いたいのか理解できませんが、リンク集としては利用可能かと思います。


CC BY-SA 4.0
2019-06-26T01:55:12.520
56100
2019-06-26T01:55:12.520
2808
56083
answer