4 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊
當(dāng)您手動(dòng)創(chuàng)建屬性 POJO 的實(shí)例時(shí),Spring 不知道它,并且屬性綁定不會(huì)發(fā)生。
SpringApplication app = new SpringApplication(MainApplication.class);
app.run();
System.out.println("step 1");
Demo config = new Demo(); // Not a Spring managed bean!
System.out.println("name: " + config);
}
@EnableConfigurationProperties您可以創(chuàng)建一個(gè) bean,而不是使用 注釋配置Demo,如類(lèi)型安全配置屬性中所示。
@Component
@ConfigurationProperties("demo")
public class Demo {
...
}
然后你可以Demo從上下文中獲取 bean:
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(MainApplication.class, args);
Demo demo = (Demo) context.getBean("demo");
System.out.println(demo.getName());
}
}
UPD: “a”和“b”之前不能有連字符:
demo:
a:
- type: A
prop1: 1
prop2: 2
proop3: 3
- type: B
prop1: 1
prop2: 2
proop3: 3
b:
- type: B
prop1: 1
prop2: 2
proop3: 3
UPD2:回答評(píng)論。Demo您可以使用以下方法從 bean構(gòu)建 JSON ObjectMapper:
@SpringBootApplication
public class MainApplication {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper();
}
public static void main(String[] args) throws JsonProcessingException {
...
ObjectMapper objectMapper = (ObjectMapper) context.getBean("objectMapper");
System.out.println(objectMapper.writeValueAsString(demo));
}
}
不需要spring-boot-starter-web額外的依賴。否則,你可以添加jackson:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.0.1</version>
</dependency>

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊
您的文件中的內(nèi)容不正確。您yml可以在此處閱讀鏈接上的Merging YAML lists參考。
我寫(xiě)了一個(gè)演示,它可以工作。
demo:
a:
b:
prop1: prop1
prop2: prop2
blist:
- prop1: prop1
prop2: prop2
alist:
- b:
prop1: prop1
prop2: prop2
blist:
- prop1: prop1
prop2: prop2
- b:
prop1: prop1
prop2: prop2
``
@ConfigurationProperties(prefix = "demo")
public class Demo {
private A a;
private List<A> alist;
// omitted getter/setter
}
``
public class A {
private B b;
private List<B> blist;
// omitted getter/setter
}
``
public class B {
private String prop1;
private String prop2;
// omitted getter/setter
}

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊
如果您想從.yml或.properties文件讀取屬性,我建議您創(chuàng)建一個(gè)類(lèi),可以PropertiesBooter在其中保存從這些文件檢索到的所有值。要從屬性文件中檢索值,您可以編寫(xiě)
@Value("${value}")
private String

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
從 Mikhail 的回答中,只需使用 Jackson ObjectMapper 編寫(xiě) json,即可獲得 json 格式:
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(YamlTestApplication.class, args);
Demo demo = (Demo) context.getBean("demo");
System.out.println("name: " + demo);
ObjectMapper mapper = new ObjectMapper();
try {
String test = mapper.writeValueAsString(demo);
System.out.println("json: "+test);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
輸出:
name: Demo [a=[A [type=A, prop1=1, prop2=2, proop3=3], A [type=B, prop1=1, prop2=2, proop3=3]], b=[B [type=A, prop1=1, prop2=2, proop3=3], B [type=B, prop1=1, prop2=2, proop3=3]]]
json: {"A":[{"type":"A","prop1":1,"prop2":2,"proop3":3},{"type":"B","prop1":1,"prop2":2,"proop3":3}],"B":[{"type":"A","prop1":1,"prop2":2,"proop3":3},{"type":"B","prop1":1,"prop2":2,"proop3":3}]}
添加回答
舉報(bào)