Atualmente estou usando a anotação @Value Spring 3.1.x assim:
@Value("${stuff.value:}")
private String value;
Isso coloca uma String vazia na variável se o atributo não estiver presente. Eu gostaria de ter null como padrão em vez de uma String vazia. É claro que também quero evitar um erro quando a propriedade stuff.value não estiver definida.
java
spring
spring-annotations
Kevin Schmidt
fonte
fonte
Isso é muito antigo, mas você pode usar Spring EL agora, por exemplo
@Value("${stuff.value:#{null}}")
Veja esta pergunta .
fonte
Agradecimentos a @vorburger:
irá definir o valor da string em nulo sem quaisquer outras configurações.
fonte
Dou crédito a @nosebrain porque não sabia sobre "valor nulo", mas prefiro evitar o uso de valores nulos, principalmente porque é difícil de representar
null
em um arquivo de propriedades.Mas aqui está uma alternativa usando null sem
null-value
para que funcione com qualquer marcador de posição de propriedade.Pessoalmente, eu prefiro do meu jeito porque talvez mais tarde você queira
stuff.value
ter um valor separado por vírgula ou talvez Enum a troca seja mais fácil. Também é mais fácil testar a unidade :)EDITAR: com base em seus comentários sobre o uso de enums e minha opinião sobre não usar null.
O acima funciona bem para mim. Você evita null. Se seus arquivos de propriedades desejam definir explicitamente que eles não querem lidar com isso, você o faz ( mas você nem mesmo precisa especificar isso, pois o padrão será NOTSET ).
null
é muito ruim e é diferente deNOTSET
. Isso significa que o teste de primavera ou unidade não definiu, é por isso que há diferença IMHO. Eu provavelmente ainda usaria a notação setter (exemplo anterior) porque é mais fácil de testar a unidade (variáveis privadas são difíceis de definir em um teste de unidade).fonte
@Value("${stuff.value:NOTSET}")
funcionaria?Caso você precise injetar uma string "" vazia (comprimento 0) como @Value padrão - use SPEL (linguagem de expressão de primavera) da seguinte maneira:
# {''} apenas fornece uma string vazia como o padrão do @ Value injetado.
por il
fonte