Je veux lire une liste d'hôtes à partir d'un fichier yaml (application.yml), le fichier ressemble à ceci:
cors:
hosts:
allow:
- http://foo1/
- http://foo2/
- http://foo3/
(Exemple 1)
Ma classe utilisée définit la valeur comme ceci:
@Value("${cors.hosts.allow}")
List<String> allowedHosts;
Mais la lecture échoue car Spring se plaint à ce sujet:
Java.lang.IllegalArgumentException: impossible de résoudre le paramètre fictif 'cors.hosts.allow' dans la valeur de chaîne "$ {cors.hosts.allow}"
Lorsque je change le fichier de cette façon, la propriété peut être lue, mais naturellement, elle ne contient pas la liste mais une seule entrée:
cors:
hosts:
allow: http://foo1, http://foo2, http://foo3
(Je sais que je pourrais lire les valeurs sur une seule ligne et les scinder en ","
mais je ne souhaite pas encore contourner le problème.)
Cela ne fonctionne pas non plus (bien que je pense que cela devrait être valable selon la documentation de snakeyamls ):
cors:
hosts:
allow: !!seq [ "http://foo1", "http://foo2" ]
(Sauter le !!seq
et simplement utiliser le [
/]
est aussi un échec)
J'ai lu la suggestion ici qui implique d'utiliser @ConfigurationProperties
et de transférer l'exemple à Java et de l'utiliser avec le fichier yaml que vous voyez dans Example1:
@Configuration
@EnableWebMvc
@ConfigurationProperties(prefix = "cors.hosts")
public class CorsConfiguration extends WebMvcConfigurerAdapter {
@NotNull
public List<String> allow;
...
Lorsque je lance ceci, je reçois cette plainte:
org.springframework.validation.BindException: org.springframework.boot.bind.RelaxedDataBinder $ RelaxedBeanPropertyBindingResult: 1 erreurs Erreur de champ dans l'objet 'cors.hosts' sur le champ 'autoriser': rejeté valeur [null]; codes [NotNull.cors.hosts.allow, NotNull.allow, NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [cors.hosts.allow, autoriser]; arguments []; message par défaut [permettre]];
J'ai cherché d'autres moyens de configurer mes hôtes CORS et ai trouvé ce problème Problème lié à Spring Boot mais, comme il n'est pas encore terminé, je ne peux pas l'utiliser comme solution ..__ Tout cela est fait avec Spring Boot 1.3 RC1
C'est facile, la réponse est dans ce doc et aussi dans celui-ci
Donc, vous avez un yaml comme ceci:
cors:
hosts:
allow:
- http://foo1/
- http://foo2/
- http://foo3/
Ensuite, vous liez d'abord les données
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
}
Ensuite, dans un autre composant que vous venez de faire
@Autowired
private AllowedHosts allowedHosts;
Et vous avez terminé!
utilisez des valeurs séparées par des virgules dans application.yml
corsHostsAllow: http://foo1/, http://foo2/, http://foo3/
Code Java pour l'accès
@Value("${corsHostsAllow}")
String[] corsHostsAllow
J'ai essayé et réussi;)
J'ai pu lire la liste de propriétés comme ci-dessous façon-
Propriétés-
cors.hosts.allow[0]=Host-0
cors.hosts.allow[1]=Host-1
Lire la propriété-
@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;
}
}