Eu tenho o seguinte em um bean Spring:
@Value("${myValue}")
private String value;
O valor é injetado corretamente. No entanto, a variável precisa ser opcional, ela é passada como um parâmetro de linha de comando (que é então adicionado ao contexto Spring usando um SimpleCommandLinePropertySource ) e este argumento nem sempre existirá.
Tentei os seguintes procedimentos para fornecer um valor padrão:
@Value("${myValue:}")
@Value("${myValue:DEFAULT}")
mas em cada caso, o argumento padrão após os dois pontos é injetado, mesmo quando há um valor real - parece substituir o que o Spring deve injetar.
Qual é a maneira correta de especificar que @Value não é necessário?
obrigado
spring
spring-bean
user1052610
fonte
fonte
@Value("${some.prop:}")
funciona para mim. Essa é a única anotação nessa variável.Respostas:
Trabalhando na suposição de que por 'não obrigatório' você quer dizer
null
então ...Você observou corretamente que pode fornecer um valor padrão à direita de um
:
caractere. Seu exemplo foi@Value("${myValue:DEFAULT}")
.Você não está limitado a strings simples como valores padrão. Você pode usar expressões SPEL , e uma expressão SPEL simples para retornar
null
é:fonte
Se estiver usando o Java 8, você pode tirar proveito de sua
java.util.Optional
classe. Você só precisa declarar a variável da seguinte maneira:Em seguida, você pode verificar se o valor está definido ou não de uma forma mais agradável:
Espero que ajude!
fonte
Optional
tipos em campos de classe.value
é nulo.