128

私は現在、次のような@ValueSpring3.1.xアノテーションを使用しています。

@Value("${stuff.value:}")
private String value;

これにより、属性が存在しない場合、変数に空の文字列が配置されます。空の文字列ではなく、デフォルトとしてnullを使用したいと思います。もちろん、プロパティstuff.valueが設定されていない場合のエラーも回避したいと思います。

4

5 に答える 5

280

これは本当に古いですが、今すぐSpringELを使用できます。

@Value("${stuff.value:#{null}}")

この質問を参照してください。

于 2015-11-13T06:47:19.997 に答える
75

PropertyPlaceholderConfigurerのnullValueを設定する必要があります。この例では、文字列を使用して@nullいますが、空の文字列をnullValueとして使用することもできます。

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <!-- config the location(s) of the properties file(s) here -->
    <property name="nullValue" value="@null" />
</bean>

これで、文字列を使用して値@nullを表すことができますnull

@Value("${stuff.value:@null}")
private String value;

注意:現在、コンテキスト名前空間はnull値をサポートしていません。使用できません

<context:property-placeholder null-value="@null" ... />

Spring3.1.1でテスト済み

于 2012-08-16T18:47:31.440 に答える
73

@vorburgerに感謝します:

@Value("${email.protocol:#{null}}")
String protocol;

他の構成なしで文字列値をnullに設定します。

于 2017-07-31T07:26:59.543 に答える
2

「null値」について知らなかったので@nosebrainのクレジットを与えますが、特にnullプロパティファイルで表すのが難しいため、null値を使用することは避けたいと思います。

ただし、これはnullを使用せずに使用する代替手段であるnull-valueため、プロパティプレースホルダーで機能します。

public class MyObject {

   private String value;

   @Value("${stuff.value:@null}")
   public void setValue(String value) {
      if ("@null".equals(value)) this.value = null;
      else this.value = value;
   }
}

個人的には、後でコンマ区切り値になりたいstuff.value場合や、スイッチを列挙する方が簡単な場合があるため、私の方法を好みます。ユニットテストも簡単です:)

編集:列挙型の使用に関するあなたのコメントとnullを使用しないという私の意見に基づいています。

@Component
public class MyObject {

    @Value("${crap:NOTSET}")
    private Crap crap;

    public enum Crap {
        NOTSET,
        BLAH;
    }
}

上記は私にとってはうまくいきます。nullを避けます。プロパティファイルがそれを処理したくないことを明示的に設定したい場合は、それを行います(ただし、デフォルトでNOTSETになるため、これを指定する必要はありません)。

crap=NOTSET

null非常に悪く、とは異なりNOTSETます。これは、スプリングまたはユニットテストで設定されなかったことを意味します。そのため、IMHOに違いがあります。単体テストが簡単なため、おそらくセッター表記(前の例)を使用します(単体テストでプライベート変数を設定するのは困難です)。

于 2012-08-16T20:55:24.803 に答える
0

@Valueのデフォルトとして空(長さ0)の ""文字列を挿入する必要がある場合は、次のようにSPEL(スプリング式言語)を使用します。

@Value("${index.suffix:#{''}}") 
private String indexSuffix;

#{''}は、@Valueのデフォルトとして挿入された空の文字列を取得します。

イルによって

于 2020-06-16T12:32:38.633 に答える