Ich möchte eine Liste von Hosts aus einer Yaml-Datei (application.yml) lesen. Die Datei sieht folgendermaßen aus:
cors:
hosts:
allow:
- http://foo1/
- http://foo2/
- http://foo3/
(Beispiel 1)
Meine verwendete Klasse definiert den Wert wie folgt:
@Value("${cors.hosts.allow}")
List<String> allowedHosts;
Aber das Lesen schlägt fehl, da Spring darüber klagt:
Java.lang.IllegalArgumentException: Der Platzhalter konnte nicht aufgelöst werden 'cors.hosts.allow' im Stringwert "$ {cors.hosts.allow}"
Wenn ich die Datei so ändere, kann die Eigenschaft gelesen werden, aber natürlich enthält sie nicht die Liste, sondern nur einen Eintrag:
cors:
hosts:
allow: http://foo1, http://foo2, http://foo3
(Ich weiß, dass ich die Werte als einzelne Zeile lesen und nach ","
aufteilen könnte, aber ich möchte noch keine Problemumgehung durchführen.)
Dies funktioniert auch nicht (obwohl ich denke, dass dies laut snakeyamls docs gültig sein sollte):
cors:
hosts:
allow: !!seq [ "http://foo1", "http://foo2" ]
(Das Überspringen des !!seq
und die Verwendung des [
/]
ist ebenfalls ein Fehler.)
Ich habe den Vorschlag hier gelesen, in dem @ConfigurationProperties
verwendet wird, und das Beispiel nach Java übertragen und mit der yaml-Datei verwendet, die Sie in Beispiel1 sehen:
@Configuration
@EnableWebMvc
@ConfigurationProperties(prefix = "cors.hosts")
public class CorsConfiguration extends WebMvcConfigurerAdapter {
@NotNull
public List<String> allow;
...
Wenn ich das mache, bekomme ich diese Beschwerde:
org.springframework.validation.BindException: org.springframework.boot.bind.RelaxedDataBinder $ RelaxedBeanPropertyBindingResult: 1 Fehler Feldfehler im Objekt 'cors.hosts' im Feld 'allow': abgelehnt value [null]; codes [NotNull.cors.hosts.allow, NotNull.allow, NotNull]; Argumente [org.springframework.context.support.DefaultMessageSourceResolvable: codes [cors.hosts.allow, allow]; Argumente []; Standardmeldung [ermöglichen]];
Ich habe nach anderen Mitteln gesucht, um meine CORS-Hosts konfigurierbar zu machen, und habe dieses Spring Boot-Problem gefunden. Da dies jedoch noch nicht abgeschlossen ist, kann ich es nicht als Lösung verwenden Booten Sie 1.3 RC1
Es ist einfach, die Antwort ist in diesem doc und auch in diesem
Sie haben also ein Yaml wie folgt:
cors:
hosts:
allow:
- http://foo1/
- http://foo2/
- http://foo3/
Dann binden Sie zuerst die Daten
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import Java.util.List;
@Component
@ConfigurationProperties(prefix="cors.hosts")
public class AllowedHosts {
private List<String> HostNames; //You can also bind more type-safe objects
}
Dann in einer anderen Komponente, die Sie gerade tun
@Autowired
private AllowedHosts allowedHosts;
Und du bist fertig!
verwenden Sie in application.yml kommagetrennte Werte
corsHostsAllow: http://foo1/, http://foo2/, http://foo3/
Java-Code für den Zugriff
@Value("${corsHostsAllow}")
String[] corsHostsAllow
Ich habe es versucht und es geschafft;)
Ich konnte die Liste von Eigenschaften wie unten lesen.
Eigenschaften-
cors.hosts.allow[0]=Host-0
cors.hosts.allow[1]=Host-1
Eigenschaft lesen-
@ConfigurationProperties("cors.hosts")
public class ReadProperties {
private List<String> allow;
public List<String> getAllow() {
return allow;
}
public void setAllow(List<String> allow) {
this.allow = allow;
}
}
Ich bin auf dasselbe Problem gestoßen. Aber gelöst, gib dir meine Lösung
exclude-url: >
/management/logout,
/management/user/login,
/partner/logout,
/partner/user/login
erfolg in der Version von Spring Boot 2.1.6.RELEASE