Actualmente estoy usando la anotación @Value Spring 3.1.x como esta:
@Value("${stuff.value:}")
private String value;
Esto coloca una Cadena vacía en la variable si el atributo no está presente. Me gustaría tener nulo como valor predeterminado en lugar de una Cadena vacía. Por supuesto, también quiero evitar un error cuando la propiedad stuff.value no está configurada.
java
spring
spring-annotations
Kevin Schmidt
fuente
fuente
Esto es realmente antiguo, pero ahora puedes usar Spring EL, por ejemplo
@Value("${stuff.value:#{null}}")
Vea esta pregunta .
fuente
Gracias a @vorburger:
establecerá el valor de la cadena en nulo sin ninguna otra configuración.
fuente
Le doy crédito a @nosebrain porque no sabía sobre "valor nulo", pero prefiero evitar el uso de valores nulos por completo, particularmente porque es difícil de representar
null
en un archivo de propiedades.Pero aquí hay una alternativa que usa null sin,
null-value
por lo que funcionará con cualquier marcador de posición de propiedad.Personalmente prefiero mi camino porque tal vez más adelante quieras
stuff.value
ser un valor separado por comas o tal vez para Enum, el cambio es más fácil. También es más fácil realizar pruebas unitarias :)EDITAR: basado en sus comentarios sobre el uso de enumeraciones y mi opinión de no usar null.
Lo anterior funciona bien para mí. Evitas nulo. Si sus archivos de propiedades quieren establecer explícitamente que no quieren manejarlo, entonces lo hace ( pero ni siquiera tiene que especificar esto, ya que estará predeterminado en NOTSET ).
null
es muy malo y es diferente aNOTSET
. Significa que la prueba de resorte o de unidad no lo configuró, por lo que en mi humilde opinión hay una diferencia. Probablemente todavía usaría la notación de establecedor (ejemplo anterior) ya que es más fácil de realizar una prueba unitaria (las variables privadas son difíciles de configurar en una prueba unitaria).fuente
@Value("${stuff.value:NOTSET}")
funcionaría.En caso de que necesite inyectar una cadena vacía (longitud 0) "" como @Value predeterminado, use SPEL (lenguaje de expresión de primavera) de la siguiente manera:
# {''} solo te da una cadena vacía como la predeterminada de @ Value inyectada.
por yl
fuente