2016-06-08 15 views
1

Ich möchte SPeL verwenden und ich muss einen Parameter aus einer Konfigurationsquelle auswerten. Das Problem ist, dass der Name/Schlüssel dynamisch ist. Also verlasse ich mich auf einen Parameter, um den anderen zu lösen. Ich muss im Grunde einen booleschen Parameter überprüfen.Wie verschachtelte Auswertungen in Spring Expression Language ausgeführt werden

Beispiel: Teilschlüssel/prefix: app.name Vollkeilwuchtung: $ {} app.name .feature.isEnabled

Also, in Spel Ich versuche, so etwas wie:

#{'${app.name}.feature.isEnabled' != null && !'${app.name}.feature.isEnabled'} 

Aber Dies kompiliert, funktioniert aber nicht.

Wenn app.name = my-app, die oben Entschlüssen zu Stringliteral: my-app.feature.isEnabled

wörtlichen in sich id ok, aber ich brauche wirklich den Wert dieses Schlüssels.

Wenn ich mit einem anderen Ausdruck zu wickeln versuchen, es nicht kompiliert:

#{${'${app.name}.feature.isEnabled'} != null && !${'${app.name}.feature.isEnabled'}} 

ich verschiedene Variationen des oben versucht, aber es nicht auf die richtige Formel machen.

Ist das möglich?

+0

Mögliches Duplikat von [Wie wird ein dynamic/nested Spring-Eigenschaft-Platzhalterausdruck ausgewertet?] (Http://stackoverflow.com/questions/20705322/how-to-evaluate-a-dynamic-nested-spring-property-placeholder -Ausdruck) –

Antwort

2

Es könnte etwas einfacher sein, aber das funktioniert ...

"#{'${${app.name}.feature.isEnabled}' != null ? '${${app.name}.feature.isEnabled}'.toLowerCase().equals('true') : 'false'}" 

Aber Sie müssen ignore-unresolvable="true" auf dem Grundstück Platzhalter configurer, wenn die Eigenschaft nicht gesetzt ist.

+0

Dies funktioniert nicht, da PropertyPlaceholderHelper die innere verschachtelte Eigenschaft nicht analysieren und identifizieren kann und return endIndex -1 (nicht gefunden) – YaOg

+0

Es funktionierte gut für mich. Ich habe es vor dem Posten getestet. Sie müssen einen Tippfehler oder etwas haben. –

+0

Ich benutze Spring Boot und versuche es anzuwenden mit: @ConditionalOnExpression ("# {'$ {spring.application.name} .http.pingtFilter.isEnabled'! = Null && '$ {$ {Frühling. application.name} .http.pingtFilter.isEnabled'.toLowerCase(). equals ('false')} ") – YaOg