Springの@Valueでデフォルトをnullにする

こんにちは、さるまりんです。

Spring Frameworkでプロパティから変数に値をセットする仕組みで@Valueアノテーションを使うことができます。

@Value("${プロパティのキー}")
[変数の型] [変数名];

例)

以下のコードでcom.salumarine.mynameのキーの値が変数nameに設定されます。

@Value("${com.salumarine.myname}")
String name;

ただし、キーはあるけれどプロパティが見つからない場合は、設定すべき値がないよとIllegalArgumentExceptionが発生して怒られます。

そのために次のようにして設定すべき値が見つからない場合のデフォルト値を指定することができます。

@Value("${プロパティーのキー:デフォルト値}")
[変数の型] [変数名];

プロパティのキーの後に:(コロン)で区切って、デフォルト値です。

@Value("${com.salumarine.myname:salu}")
String name;

上記のコードではcom.salumarine.mynameで値が見つからなくても、nameには"salu"の文字列がデフォルト値として設定されます。

前置きが長くなりました。では本題です。

nullを設定する場合どうするでしょうか?

@Value("${com.salumarine.myname:null}")
String name;

これではnameにはnullが設定されるのではなく、"null"という文字列が設定されてしまいます。

@Valueでnullを設定する

nullを設定したい場合は以下のように書きます。

@Value("${プロパティのキー:#{null}}")
[変数の型] [変数名];

nameの例ですと

@Value("${com.salumarine.myname:#{null}}")
String name;

これでOKです。

設定されてないとエラーとなるのが正しいケースもあると思いますが、デフォルト値を設定できることで便利に使えるケースもあるかなと思います。

この辺りは難しいですね。何か指針があるのかな。また勉強したいと思います。

読んでくださってありがとうございます。

それではまた!