java - 使用 Jackson 读取 Java 中的部分 yaml
问题描述
如果我有以下 yaml(我在网上找到)代表一个 javaOrder
类,order.yaml
:
orderNo: A001
customerName: Customer, Joe
orderLines:
- item: No. 9 Sprockets
quantity: 12
unitPrice: 1.23
- item: Widget (10mm)
quantity: 4
unitPrice: 3.45
我能够使用
ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
Order order = objectMapper.readValue(new File(<path_to_order>), Order.class);
但这意味着我需要提前定义......如果我orderNo
有orderLines
一个带有一堆嵌套属性的巨型 yaml,这会很烦人。如果我想要一个可以读取一个属性的类或一个可以读取另一个属性并“忽略”其他属性的类怎么办?这甚至可能吗?这样我就可以指定我想要的 java 对象,而不必递归地定义 yaml 的每个属性。谢谢!
解决方案
Map 方法将使您失去类型安全性。无需定义每个属性。您也可以将 Json 注释与 YAML 一起使用,这只是一个历史遗留问题,它被称为 Json。您正在寻找的是@JsonIgnoreProperties(ignoreUnknown = true)
.
如果您不想为每个类指定 Annotation,请使用objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
.
public static void main(String[] args) throws IOException {
ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
Order order = objectMapper.readValue(new File("foo.yml"), Order.class);
System.out.println(order.getOrderLines().get(0).getItem());
}
@JsonIgnoreProperties(ignoreUnknown = true)
static class Order {
private String orderNo;
private List<OrderLine> orderLines;
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public List<OrderLine> getOrderLines() {
return orderLines;
}
public void setOrderLines(List<OrderLine> orderLines) {
this.orderLines = orderLines;
}
@JsonIgnoreProperties(ignoreUnknown = true)
static class OrderLine {
private String item;
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
}
}
推荐阅读
- c++ - std::promise::set_value() 和 std::future::wait() 是否提供内存围栏?
- spring-boot - 我可以在@OneToMany 上使用@JoinColumn 吗?
- reactjs - 如何使用 i18next 设置 RTL 翻译方向?
- java - 如何在 Junit 中分配枚举值?
- kotlin - 我在 kotlin 中放了令牌的地方
- python - 为什么在某些函数中可以访问全局变量而在其他函数中不能访问?
- mysql - 来自许多变量的 MySQL CONCAT_WS - 如何将查询限制为仅现有数据?
- sql-server - KC-SERVICES0089:无法运行计划任务 ClearExpiredClientInitialAccessTokens
- java - 应用程序被杀死时没有收到通知
- mysql - 在没有公共列的情况下连接 MYSQL 中的表