tag mvc form docs spring spring-bean

spring - mvc - Cómo definir @Value como opcional



spring mvc (2)

Tengo lo siguiente en un frijol de primavera:

@Value("${myValue}") private String value;

El valor está correctamente inyectado. Sin embargo, la variable debe ser opcional, se pasa como un parámetro de línea de comando (que luego se agrega al contexto de Spring utilizando un SimpleCommandLinePropertySource ), y este argumento no siempre existirá.

He intentado ambos lo siguiente para proporcionar un valor predeterminado:

@Value("${myValue:}") @Value("${myValue:DEFAULT}")

pero en cada caso, el argumento predeterminado después de los dos puntos se inyecta 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


¿Cuál es la forma correcta de especificar que @Value no es obligatorio?

Trabajando en la suposición de que por ''no requerido'' te refieres a null entonces ...

Ha notado correctamente que puede proporcionar un valor predeterminado a la derecha de a : carácter. Su ejemplo fue @Value("${myValue:DEFAULT}") .

No está limitado a strings simples como valores predeterminados. Puede usar expresiones SPEL , y una expresión SPEL simple para devolver null es:

@Value("${myValue:#{null}}")


Si está utilizando Java 8, puede aprovechar su clase java.util.Optional . Solo tienes que declarar la variable de la siguiente manera:

@Value("${myValue:#{null}}") private Optional<String> value;

Luego, puede verificar si el valor está definido o no de una manera más agradable:

if (optional.isPresent()) { // do something cool }

¡Espero eso ayude!