Tengo lo siguiente en un bean Spring:
@Value("${myValue}")
private String value;
El valor se inyecta correctamente. Sin embargo, la variable debe ser opcional, se pasa como un parámetro de línea de comando (que luego se agrega al contexto Spring usando SimpleCommandLinePropertySource ), y este argumento no siempre existirá.
He intentado lo siguiente para proporcionar un valor predeterminado:
@Value("${myValue:}")
@Value("${myValue:DEFAULT}")
pero en cada caso, el argumento predeterminado después de que se inyectan los dos puntos incluso cuando hay un valor real; esto parece anular lo que Spring debería inyectar.
¿Cuál es la forma correcta de especificar que @Value no es obligatorio?
Gracias
spring
spring-bean
usuario1052610
fuente
fuente
@Value("${some.prop:}")
funciona para mí. Esa es la única anotación sobre esa variable.Respuestas:
Trabajando en el supuesto de que por 'no requerido' te refieres a
null
entonces ...Ha notado correctamente que puede proporcionar un valor predeterminado a la derecha de un
:
carácter. Tu ejemplo fue@Value("${myValue:DEFAULT}")
.No está limitado a cadenas simples como valores predeterminados. Puede usar expresiones SPEL , y una expresión SPEL simple para devolver
null
es:fuente
Si está utilizando Java 8, puede aprovechar su
java.util.Optional
clase. Solo tienes que declarar la variable de la siguiente manera:Luego, puede verificar si el valor está definido o no de una manera más agradable:
¡Espero eso ayude!
fuente
Optional
tipos en campos de clase.value
es nulo.