2014-04-28 30 views
50

Mam następujący w wiosennej Fasola:Jak zdefiniować @Value jako opcjonalny

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

Wartość jest poprawnie wstrzyknięty. Jednak zmienna musi być opcjonalna, jest przekazywana jako parametr wiersza poleceń (który jest następnie dodawany do kontekstu Spring za pomocą SimpleCommandLinePropertySource), a ten argument nie zawsze będzie istnieć.

Próbowałem oba następujące w celu zapewnienia Wartość domyślna:

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

ale w każdym przypadku, domyślnym argumentem po dwukropku jest wstrzykiwany nawet gdy istnieje rzeczywista wartość - to wydaje przesłonić co Wiosna powinna wstrzyknąć.

Jaki jest właściwy sposób określenia, że ​​@ Wartość nie jest wymagany?

Dzięki

+0

To bardzo dziwne ... domyślna wartość powinna działać tylko jako wartość domyślna (tj. Gdy właściwość nie jest zdefiniowana). Czy możesz dwukrotnie sprawdzić wyciągi "wartość domyślna jest wstrzykiwana, nawet jeśli istnieje rzeczywista wartość" (np. Jeśli nie ma starej skompilowanej klasy)? –

+4

'@Value (" $ {some.prop:} ")' działa dla mnie. To jest jedyna adnotacja w tej zmiennej. – Zarathustra

+0

Czy możesz wysłać swoją konfigurację aplikacji? –

Odpowiedz

91

Jaki jest prawidłowy sposób określić, że @Value nie jest wymagana?

Praca na założeniu, że „nie jest wymagane” znaczy null potem ...

pan słusznie zauważył, że można podać wartość domyślną, aby po prawej stronie : charakteru. Twój przykład to @Value("${myValue:DEFAULT}").

Nie jesteś ograniczony do zwykłych ciągów znaków jako wartości domyślnych. Można użyć SPEL wyrażenia i proste wyrażenie SPEL wrócić null jest:

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

Jeśli używasz Java 8, można skorzystać z jego java.util.Optional klasie. Po prostu trzeba zadeklarować zmienną po tej drodze:

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

Następnie można sprawdzić, czy wartość jest zdefiniowana lub nie w ładniejszy sposób:

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

Nadzieję, że to pomaga!

Powiązane problemy