daję @nosebrain kredyt, bo nie wiedział o „zerowej wartości”, ale ja wolę unikać wartości null całkowicie szczególnie od jego trudne do reprezentowania null
w pliku właściwości.
Ale tutaj jest alternatywa przy użyciu wartości null bez numeru null-value
, więc będzie działać z dowolnym obiektem zastępczym.
public class MyObject {
private String value;
@Value("${stuff.value:@null}")
public void setValue(String value) {
if ("@null".equals(value)) this.value = null;
else this.value = value;
}
}
Osobiście wolę moją drogę, bo może później chcesz stuff.value
być oddzielone przecinkami wartości lub być może do ENUM przełącznik jest łatwiejsze. Jest także łatwiejszy w testowaniu jednostkowym :)
EDYCJA: na podstawie twoich komentarzy na temat używania wyrażeń i mojej opinii o nieużywaniu null.
@Component
public class MyObject {
@Value("${crap:NOTSET}")
private Crap crap;
public enum Crap {
NOTSET,
BLAH;
}
}
Powyższe działa dobrze dla mnie. Unikasz wartości zerowej. Jeśli twoje pliki właściwości chcą jawnie ustawić, że nie chcą tego obsługiwać, robisz to (, ale nie musisz nawet tego określać, ponieważ będzie domyślnie NOTSET).
crap=NOTSET
null
jest bardzo złe i jest inna niż NOTSET
. Oznacza to, że wiosna lub test jednostkowy go nie ustawiły, dlatego istnieje IMHO różnica. Nadal prawdopodobnie używałbym notacji settera (poprzedni przykład), ponieważ jest to łatwiejsze do testowania jednostkowego (prywatne zmienne są trudne do ustawienia w teście jednostkowym).
Co to jest odpowiednik w konfiguracji Java? –
http://stackoverflow.com/questions/9347929/spring-set-a-property-only-if-the-value-is-not-null wspomina o użyciu $ {some.param: # {null}}, a także pracował dla mnie bez konieczności ustawiania wartości nullValue, wydaje się, że jest to ustawienie domyślne? (W aplikacji Spring Boot.) – vorburger
Proste użycie SPEL $ {stuff.value: # {null}} zgodnie z sugestią vorburgera oraz w http://stackoverflow.com/questions/16735141/specify-default-property- value-as-null-in-spring – csf