Dies ist nicht möglich, wenn Sie eine automatische Zuordnung von Yaml-Schlüsseln zu Java-Bean-Attributen wünschen. Grund ist, Spring zuerst konvertieren YAML in Eigenschaften-Format. Siehe Abschnitt 24.6.1 der unten stehenden Link:
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
So, Ihr YAML umgewandelt wird:
foo.bar.com.a=b
foo.baz.com.a=c
Above Schlüssel werden als Standardeigenschaften analysiert.
Als eine Arbeit können Sie Spring YamlMapFactoryBean
verwenden, um eine Yaml Map zu erstellen, wie es ist. Dann können Sie diese Karte verwenden, um eigene Java-Beans zu erstellen.
@Configuration
public class Config {
private Map<String, Object> foo;
@Bean
public Map<String, Object> setup() {
foo = yamlFactory().getObject();
System.out.println(foo); //Prints {foo={bar.com={a=b}, baz.com={a=c}}}
return foo;
}
@Bean
public YamlMapFactoryBean yamlFactory() {
YamlMapFactoryBean factory = new YamlMapFactoryBean();
factory.setResources(resource());
return factory;
}
public Resource resource() {
return new ClassPathResource("a.yaml"); //a.yaml contains your yaml config in question
}
}
Der Grund, warum der Schlüssel nicht hilft, ist, weil 'bar.com:', '" bar.com ":' und ''bar.com':' (und '? Bar.com') alle die darstellen genau dasselbe in YAML und alle werden zu der Zeichenkette 'bar.com' deserialisiert. Der Punkt bedeutet in YAML nichts Spezielles - das Verhalten, das Sie sehen, findet im Frühling statt, nachdem das YAML deserialisiert wurde. –
Also ist Spring mit YamlPropertiesFactoryBean hinter den Kulissen? Wenn ja, gibt es eine Möglichkeit, stattdessen YamlMapFactoryBean zu verwenden? :) – theadam