Java 有没有办法将值从YAML映射到对象列表
我正试图从YAML文件创建一个服务器对象列表,正如我在上面看到的,但是使用Micronaut 我的YAML文件具有以下配置:Java 有没有办法将值从YAML映射到对象列表,java,micronaut,Java,Micronaut,我正试图从YAML文件创建一个服务器对象列表,正如我在上面看到的,但是使用Micronaut 我的YAML文件具有以下配置: server: - name: "Server 1" flow: "both" environment: "test" - name: "Server 2" flow: "both" environment: "production" 我的目标是: pack
server:
-
name: "Server 1"
flow: "both"
environment: "test"
-
name: "Server 2"
flow: "both"
environment: "production"
我的目标是:
package dev.renansouza.server;
public class Server {
private String name;
private String flow;
private String environment;
public Server() {}
public Server(String name, String flow, String environment) {
this.name = name;
this.flow = flow;
this.environment = environment;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFlow() {
return flow;
}
public void setFlow(String flow) {
this.flow = flow;
}
public String getEnvironment() {
return environment;
}
public void setEnvironment(String environment) {
this.environment = environment;
}
@Override
public String toString() {
return "Servers -> name: " + name + " flow: " + flow + " environment: " + environment;
}
}
我的服务是:
package dev.renansouza.server;
import io.micronaut.context.annotation.ConfigurationProperties;
import javax.annotation.PostConstruct;
import javax.inject.Singleton;
import java.util.ArrayList;
import java.util.List;
import static dev.renansouza.server.ServerService.PREFIX;
@Singleton
@ConfigurationProperties(PREFIX)
public class ServerService {
public static final String PREFIX = "server";
private List<Server> networkRules = new ArrayList<>();
@PostConstruct
public void init() {
for(Server s : this.getServers()) {
System.out.println(s);
}
}
public List<Server> getServers() {
return this.networkRules;
}
}
包dev.renansouza.server;
导入io.micronaut.context.annotation.ConfigurationProperties;
导入javax.annotation.PostConstruct;
导入javax.inject.Singleton;
导入java.util.ArrayList;
导入java.util.List;
导入静态dev.renansouza.server.ServerService.PREFIX;
@独生子女
@配置属性(前缀)
公共类服务器服务{
公共静态最终字符串前缀=“服务器”;
私有列表networkRules=new ArrayList();
@施工后
公共void init(){
对于(服务器s:this.getServers()){
系统输出打印项次;
}
}
公共列表getServers(){
返回此.networkRules;
}
}
我在System.out.println行上放置了一个断点,并以debug的形式启动了应用程序,但什么也没发生
我需要做任何额外的配置吗?请参阅上的项目
我意识到,您的问题明确地询问了yaml中的列表,本例没有使用列表,但从其他注释和您发布的示例代码来看,您似乎并不真正需要yaml中的列表。如果您真的希望在yaml中列出一个列表,那么也有一种方法可以做到这一点。如果这真的是你需要的,请告诉我
我希望这会有所帮助。请参阅上的项目
我意识到,您的问题明确地询问了yaml中的列表,本例没有使用列表,但从其他注释和您发布的示例代码来看,您似乎并不真正需要yaml中的列表。如果您真的希望在yaml中列出一个列表,那么也有一种方法可以做到这一点。如果这真的是你需要的,请告诉我
我希望这会有帮助。
@EachProperty
会帮助您。瞧,嗨,杰夫,我正试着按照文件做。我甚至在他的博客上做了一些尝试,但我从未得到任何结果。如果有帮助的话,我在@EachProperty
创建了一个分支来实现这一点。瞧,嗨,杰夫,我正试着按照文件做。我甚至在他的博客上做了一些尝试,但我从未得到任何结果。如果有帮助的话,我在Hi Jeff创建了一个分支来实现这一点,你再次拯救了这一天。我认为列表将是满足我需求的最佳实现。实际上,您的解决方案满足了以下需求:*为每台服务器创建一个文件夹;*为每个流创建一个子文件夹;我希望我学习micronaut的道路能在将来帮助他人。祝你好运,雷南·苏扎希·杰夫,你又一次拯救了这一天。我认为列表将是满足我需求的最佳实现。实际上,您的解决方案满足了以下需求:*为每台服务器创建一个文件夹;*为每个流创建一个子文件夹;我希望我学习micronaut的道路能在将来帮助他人。向你问好,雷南·苏扎
micronaut:
application:
name: renansouzaproperties
server:
Server 1:
flow: both
environment: test
Server 2:
flow: both
environment: production
package renansouzaproperties;
import io.micronaut.context.annotation.EachProperty;
import io.micronaut.context.annotation.Parameter;
@EachProperty("server")
public class Server {
private String name;
private String flow;
private String environment;
public Server(@Parameter String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFlow() {
return flow;
}
public void setFlow(String flow) {
this.flow = flow;
}
public String getEnvironment() {
return environment;
}
public void setEnvironment(String environment) {
this.environment = environment;
}
@Override
public String toString() {
return "Servers -> name: " + name + " flow: " + flow + " environment: " + environment;
}
}
package renansouzaproperties;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.HttpStatus;
import java.util.List;
@Controller("/demo")
public class DemoController {
private List<Server> serverList;
public DemoController(List<Server> serverList) {
this.serverList = serverList;
}
@Get("/")
public HttpStatus index() {
for(Server server: serverList) {
System.out.println(server);
}
return HttpStatus.OK;
}
}
Servers -> name: server 1 flow: both environment: test
Servers -> name: server 2 flow: both environment: production