diff --git a/jackson-2/pom.xml b/jackson-2/pom.xml
index ddbcb81dcc..6b973dd6f5 100644
--- a/jackson-2/pom.xml
+++ b/jackson-2/pom.xml
@@ -22,6 +22,20 @@
${jackson.version}
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-yaml
+ 2.9.8
+
+
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+ 2.9.8
+
+
diff --git a/jackson-2/src/main/java/com/baeldung/jackson/entities/Order.java b/jackson-2/src/main/java/com/baeldung/jackson/entities/Order.java
new file mode 100644
index 0000000000..2075b7879b
--- /dev/null
+++ b/jackson-2/src/main/java/com/baeldung/jackson/entities/Order.java
@@ -0,0 +1,68 @@
+package com.baeldung.jackson.entities;
+
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Order {
+ private String orderNo;
+ private LocalDate date;
+ private String customerName;
+ private List orderLines;
+
+ public Order() {
+
+ }
+
+ public Order(String orderNo, LocalDate date, String customerName, List orderLines) {
+ super();
+ this.orderNo = orderNo;
+ this.date = date;
+ this.customerName = customerName;
+ this.orderLines = orderLines;
+ }
+
+ public String getOrderNo() {
+ return orderNo;
+ }
+
+ public void setOrderNo(String orderNo) {
+ this.orderNo = orderNo;
+ }
+
+ public LocalDate getDate() {
+ return date;
+ }
+
+ public void setDate(LocalDate date) {
+ this.date = date;
+ }
+
+ public String getCustomerName() {
+ return customerName;
+ }
+
+ public void setCustomerName(String customerName) {
+ this.customerName = customerName;
+ }
+
+ public List getOrderLines() {
+ if (orderLines == null) {
+ orderLines = new ArrayList<>();
+ }
+ return orderLines;
+ }
+
+ public void setOrderLines(List orderLines) {
+ if (orderLines == null) {
+ orderLines = new ArrayList<>();
+ }
+ this.orderLines = orderLines;
+ }
+
+ @Override
+ public String toString() {
+ return "Order [orderNo=" + orderNo + ", date=" + date + ", customerName=" + customerName + ", orderLines=" + orderLines + "]";
+ }
+
+}
diff --git a/jackson-2/src/main/java/com/baeldung/jackson/entities/OrderLine.java b/jackson-2/src/main/java/com/baeldung/jackson/entities/OrderLine.java
new file mode 100644
index 0000000000..858d094dd1
--- /dev/null
+++ b/jackson-2/src/main/java/com/baeldung/jackson/entities/OrderLine.java
@@ -0,0 +1,49 @@
+package com.baeldung.jackson.entities;
+
+import java.math.BigDecimal;
+
+public class OrderLine {
+ private String item;
+ private int quantity;
+ private BigDecimal unitPrice;
+
+ public OrderLine() {
+
+ }
+
+ public OrderLine(String item, int quantity, BigDecimal unitPrice) {
+ super();
+ this.item = item;
+ this.quantity = quantity;
+ this.unitPrice = unitPrice;
+ }
+
+ public String getItem() {
+ return item;
+ }
+
+ public void setItem(String item) {
+ this.item = item;
+ }
+
+ public int getQuantity() {
+ return quantity;
+ }
+
+ public void setQuantity(int quantity) {
+ this.quantity = quantity;
+ }
+
+ public BigDecimal getUnitPrice() {
+ return unitPrice;
+ }
+
+ public void setUnitPrice(BigDecimal unitPrice) {
+ this.unitPrice = unitPrice;
+ }
+
+ @Override
+ public String toString() {
+ return "OrderLine [item=" + item + ", quantity=" + quantity + ", unitPrice=" + unitPrice + "]";
+ }
+}
diff --git a/jackson-2/src/main/resources/orderInput.yaml b/jackson-2/src/main/resources/orderInput.yaml
new file mode 100644
index 0000000000..0aaa6186a2
--- /dev/null
+++ b/jackson-2/src/main/resources/orderInput.yaml
@@ -0,0 +1,11 @@
+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
+
\ No newline at end of file
diff --git a/jackson-2/src/test/java/com/baeldung/jackson/yaml/YamlUnitTest.java b/jackson-2/src/test/java/com/baeldung/jackson/yaml/YamlUnitTest.java
new file mode 100644
index 0000000000..3ed84db60e
--- /dev/null
+++ b/jackson-2/src/test/java/com/baeldung/jackson/yaml/YamlUnitTest.java
@@ -0,0 +1,63 @@
+package com.baeldung.jackson.yaml;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.baeldung.jackson.entities.Order;
+import com.baeldung.jackson.entities.OrderLine;
+import com.fasterxml.jackson.core.JsonGenerationException;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator.Feature;
+
+public class YamlUnitTest {
+ private ObjectMapper mapper;
+
+ @Before
+ public void setup() {
+ mapper = new ObjectMapper(new YAMLFactory().disable(Feature.WRITE_DOC_START_MARKER));
+ mapper.findAndRegisterModules();
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ }
+
+ @Test
+ public void givenYamlInput_ObjectCreated() throws JsonParseException, JsonMappingException, IOException {
+ Order order = mapper.readValue(new File("src/main/resources/orderInput.yaml"), Order.class);
+ assertEquals("A001", order.getOrderNo());
+ assertEquals(LocalDate.parse("2019-04-17", DateTimeFormatter.ISO_DATE), order.getDate());
+ assertEquals("Customer, Joe", order.getCustomerName());
+ assertEquals(2, order.getOrderLines()
+ .size());
+ }
+
+ @Test
+ public void givenYamlObject_FileWritten() throws JsonGenerationException, JsonMappingException, IOException {
+ List 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);
+ mapper.writeValue(new File("src/main/resources/orderOutput.yaml"), order);
+
+ File outputYaml = new File("src/main/resources/orderOutput.yaml");
+ assertTrue(outputYaml.exists());
+ }
+}