JacksonでYAMLを処理する方法

1. 前書き

この短いチュートリアルでは、https://www.baeldung.com/jackson [Jackson]を使用してYAMLファイルを読み書きする方法を学習します。
サンプル構造を確認した後、https://www.baeldung.com/jackson-object-mapper-tutorial [_ObjectMapper_]を使用して、YAMLファイルをJavaオブジェクトに読み取り、さらにオブジェクトをファイル。

2. 依存関係

Jackson YAMLデータ形式の依存関係を追加しましょう。
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-yaml</artifactId>
    <version>2.9.8</version>
</dependency>
この依存関係の最新バージョンは、https://search.maven.org/search?q = g:com.fasterxml.jackson.dataformat%20AND%20a:jackson-dataformat-yaml&core = gav [Maven Central ]。
Javaオブジェクトは_LocalDate_を使用するため、JSR-310データ型の依存関係も追加しましょう。
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.9.8</version>
</dependency>
繰り返しになりますが、https://search.maven.org/search?q = g:com.fasterxml.jackson.datatype%20AND%20a:jackson-datatype-jsr310&core = gav [Maven Central]で最新バージョンを検索できます。 。

3. データとオブジェクト構造

依存関係を二乗して、入力ファイルと使用するJavaクラスに目を向けます。
最初に読み込むファイルを見てみましょう。
orderNo: A001
date: 2019-04-17
customerName: Customer, Joe
orderLines:
    - item: No. 9 Sprockets
      quantity: 12
      unitPrice: 1.23
    - item: Widget (10mm)
      quantity: 4
      unitPrice: 3.45
次に、_Order_クラスを定義しましょう。
public class Order {
    private String orderNo;
    private LocalDate date;
    private String customerName;
    private List<OrderLine> orderLines;

    // Constructors, Getters, Setters and toString
}
最後に、_OrderLine_クラスを作成しましょう。
public class OrderLine {
    private String item;
    private int quantity;
    private BigDecimal unitPrice;

    // Constructors, Getters, Setters and toString
}

4. YAMLを読む

  • Jacksonの_ObjectMapper_ *を使用してYAMLファイルを_Order_オブジェクトに読み込むため、ここで設定します。

mapper = new ObjectMapper(new YAMLFactory());
Jacksonが_Date_を適切に処理するために、「findAndRegisterModulesメソッド」を使用する必要があります。
mapper.findAndRegisterModules();
_ObjectMapper_を構成したら、*単に_readValue _:*を使用します
Order order = mapper.readValue(new File("src/main/resources/orderInput.yaml"), Order.class);
_Order_オブジェクトは、_OrderLine_のリストを含むファイルから読み込まれます。

5. YAMLを書く

また、_ObjectMapper_を使用して、_Order_をファイルに書き込みます。 しかし、最初にいくつかの設定を追加しましょう:
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
この行を追加すると、個々の数値部分ではなく_String_ *として日付を書き込むようにジャクソンに指示されます。
デフォルトでは、ファイルは3つのダッシュで始まります。 これはYAML形式には完全に有効ですが、* YAMLFactory_で*機能を無効にすることで無効にできます:
mapper = new ObjectMapper(new YAMLFactory().disable(Feature.WRITE_DOC_START_MARKER));
邪魔にならないように追加設定を行ったら、_Order_を作成しましょう。
List<OrderLine> lines = new ArrayList<>();
lines.add(new OrderLine("Copper Wire (200ft)", 1,
  new BigDecimal(50.67).setScale(2, RoundingMode.HALF_UP)));
lines.add(new OrderLine("Washers (1/4\")", 24,
  new BigDecimal(.15).setScale(2, RoundingMode.HALF_UP)));
Order order = new Order(
  "B-9910",
  LocalDate.parse("2019-04-18", DateTimeFormatter.ISO_DATE),
  "Customer, Jane",
  lines);
_writeValue_を使用して注文を書きましょう。
mapper.writeValue(new File("src/main/resources/orderOutput.yaml"), order);
_orderOutput.yaml_を調べると、次のようになります。
orderNo: "B-9910"
date: "2019-04-18"
customerName: "Customer, Jane"
orderLines:
- item: "Copper Wire (200ft)"
  quantity: 1
  unitPrice: 50.67
- item: "Washers (1/4\")"
  quantity: 24
  unitPrice: 0.15

6. 結論

このクイックチュートリアルでは、Jacksonライブラリを使用してファイルとYAMLを読み書きする方法を学びました。 また、データを希望どおりに表示するのに役立ついくつかの構成アイテムも確認しました。
完全なサンプルコードはhttps://github.com/eugenp/tutorials/tree/master/jackson-2[over on GitHub]です。