diff --git a/pom.xml b/pom.xml
index 0df7dd7a9e..d2db787c64 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,8 +18,8 @@
algorithms
annotations
apache-cxf
- apache-fop
- apache-poi
+ apache-fop
+ apache-poi
aspectj
assertj
autovalue
@@ -122,7 +122,7 @@
spring-hibernate3
spring-hibernate4
spring-integration
- spring-jersey
+ spring-jersey
spring-jms
spring-jooq
spring-jpa
@@ -176,12 +176,14 @@
testing
+ video-tutorials
+
wicket
xml
xmlunit2
xstream
- java-mongodb
+
struts2
diff --git a/video-tutorials/jackson-annotations/pom.xml b/video-tutorials/jackson-annotations/pom.xml
new file mode 100644
index 0000000000..70f2cf05f5
--- /dev/null
+++ b/video-tutorials/jackson-annotations/pom.xml
@@ -0,0 +1,246 @@
+
+ 4.0.0
+ com.baeldung
+ jackson-annotations
+ 1.0.0-SNAPSHOT
+
+ war
+ jacksonannotation
+ http://www.baeldung.com
+
+
+ com.baeldung
+ video-tutorials
+ 1.0.0-SNAPSHOT
+
+
+
+
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
+
+ commons-io
+ commons-io
+ ${commons-io.version}
+
+
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-xml
+ ${jackson.version}
+
+
+
+ org.apache.commons
+ commons-collections4
+ ${commons-collections4.version}
+
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+ ${jackson.version}
+
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-joda
+ ${jackson.version}
+
+
+
+ com.fasterxml.jackson.module
+ jackson-module-jsonSchema
+ ${jackson.version}
+
+
+
+ joda-time
+ joda-time
+ ${joda-time.version}
+
+
+
+ com.google.code.gson
+ gson
+ ${gson.version}
+
+
+
+
+ io.rest-assured
+ rest-assured
+ 3.0.1
+ test
+
+
+
+
+ io.rest-assured
+ json-schema-validator
+ 3.0.0
+ test
+
+
+
+ io.rest-assured
+ json-path
+ ${json-path.version}
+ test
+
+
+
+ com.github.fge
+ json-schema-validator
+ ${json-schema-validator.version}
+ test
+
+
+
+ junit
+ junit
+ ${junit.version}
+ test
+
+
+
+ org.assertj
+ assertj-core
+ ${assertj-core.version}
+ test
+
+
+
+
+ ch.qos.logback
+ logback-classic
+ ${logback.version}
+
+
+
+
+ org.slf4j
+ slf4j-api
+ ${org.slf4j.version}
+
+
+
+ org.slf4j
+ jcl-over-slf4j
+ ${org.slf4j.version}
+
+
+
+ org.slf4j
+ log4j-over-slf4j
+ ${org.slf4j.version}
+
+
+
+
+
+ jackson-annotations
+
+
+ src/main/resources
+ true
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+
+ ${maven-compiler-plugin.source}
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${maven-surefire-plugin.version}
+
+
+
+
+
+
+
+
+
+ 4.3.11.Final
+ 5.1.38
+
+
+ 2.8.5
+
+
+ 1.7.21
+ 1.1.7
+
+
+ 5.1.3.Final
+ 2.9.6
+ 2.8.0
+ 4.1
+
+
+ 20.0
+ 3.5
+ 2.5
+
+
+ 1.3
+ 4.12
+ 2.2.26
+
+ 4.4.1
+ 4.5
+
+ 2.9.0
+
+ 3.6.1
+ 2.2.6
+ 3.0.1
+
+
+ 3.5.1
+ 2.6
+ 2.19.1
+ 2.7
+ 1.4.18
+
+ UTF-8
+ 1.8
+
+
+
+
+
+
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jacksoninject/Author.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jacksoninject/Author.java
new file mode 100644
index 0000000000..42d014de8a
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jacksoninject/Author.java
@@ -0,0 +1,32 @@
+package com.baeldung.jacksonannotation.deserialization.jacksoninject;
+
+import com.baeldung.jacksonannotation.domain.Item;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Author extends Person {
+
+ List- items = new ArrayList<>();
+
+ public Author(){
+ super();
+ }
+ public Author(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ public List
- getItems() {
+ return items;
+ }
+
+ public void setItems(List
- items) {
+ this.items = items;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jacksoninject/Person.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jacksoninject/Person.java
new file mode 100644
index 0000000000..e185893c00
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jacksoninject/Person.java
@@ -0,0 +1,49 @@
+package com.baeldung.jacksonannotation.deserialization.jacksoninject;
+
+import com.fasterxml.jackson.annotation.JacksonInject;
+
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Person {
+
+ @JacksonInject
+ private UUID id;
+ private String firstName;
+ private String lastName;
+
+ public Person(){
+
+ }
+
+ public Person(String firstName, String lastName) {
+ this.id = UUID.randomUUID();
+ this.firstName = firstName;
+ this.lastName = lastName;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsonanysetter/Inventory.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsonanysetter/Inventory.java
new file mode 100644
index 0000000000..0016f749ea
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsonanysetter/Inventory.java
@@ -0,0 +1,38 @@
+package com.baeldung.jacksonannotation.deserialization.jsonanysetter;
+
+import com.baeldung.jacksonannotation.domain.Author;
+import com.baeldung.jacksonannotation.domain.Item;
+import com.fasterxml.jackson.annotation.JsonAnyGetter;
+import com.fasterxml.jackson.annotation.JsonAnySetter;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ * @see JsonAnyGetter
+ */
+public class Inventory {
+
+ private Map stock = new HashMap<>();
+
+ private Map countryDeliveryCost = new HashMap<>();
+
+ @JsonIgnore
+ public Map getStock() {
+ return stock;
+ }
+
+ public Map getCountryDeliveryCost() {
+ return countryDeliveryCost;
+ }
+
+ @JsonAnySetter
+ public void addCountryDeliveryCost(String country, Float cost) {
+ countryDeliveryCost.put(country, cost);
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsoncreator/Author.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsoncreator/Author.java
new file mode 100644
index 0000000000..91afd16eb0
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsoncreator/Author.java
@@ -0,0 +1,38 @@
+package com.baeldung.jacksonannotation.deserialization.jsoncreator;
+
+
+import com.baeldung.jacksonannotation.domain.Item;
+import com.baeldung.jacksonannotation.domain.Person;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonGetter;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ * @see JsonGetter
+ */
+public class Author extends Person {
+
+ List
- items = new ArrayList<>();
+
+ @JsonCreator
+ public Author(
+ @JsonProperty("christianName") String firstName,
+ @JsonProperty("surname") String lastName) {
+ super(firstName, lastName);
+ }
+
+ public List
- getItems() {
+ return items;
+ }
+
+ public void setItems(List
- items) {
+ this.items = items;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsondeserialize/Author.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsondeserialize/Author.java
new file mode 100644
index 0000000000..6999e53411
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsondeserialize/Author.java
@@ -0,0 +1,30 @@
+package com.baeldung.jacksonannotation.deserialization.jsondeserialize;
+
+import com.baeldung.jacksonannotation.domain.Item;
+import com.baeldung.jacksonannotation.domain.Person;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Author extends Person {
+
+ List
- items = new ArrayList<>();
+
+ public Author(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ public List
- getItems() {
+ return items;
+ }
+
+ public void setItems(List
- items) {
+ this.items = items;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsondeserialize/Book.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsondeserialize/Book.java
new file mode 100644
index 0000000000..1ab53e7f9f
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsondeserialize/Book.java
@@ -0,0 +1,53 @@
+package com.baeldung.jacksonannotation.deserialization.jsondeserialize;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Book extends Item {
+
+ private String ISBN;
+
+ @JsonDeserialize(using = CustomDateDeserializer.class)
+ private Date published;
+ private BigDecimal pages;
+
+ public Book() {
+ super();
+ }
+
+ public Book(String title, Author author) {
+ super(title, author);
+ }
+
+ public String getISBN() {
+ return ISBN;
+ }
+
+ public void setISBN(String ISBN) {
+ this.ISBN = ISBN;
+ }
+
+ public Date getPublished() {
+ return published;
+ }
+
+ public void setPublished(Date published) {
+ this.published = published;
+ }
+
+ public BigDecimal getPages() {
+ return pages;
+ }
+
+ public void setPages(BigDecimal pages) {
+ this.pages = pages;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsondeserialize/CustomDateDeserializer.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsondeserialize/CustomDateDeserializer.java
new file mode 100644
index 0000000000..3d048ed347
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsondeserialize/CustomDateDeserializer.java
@@ -0,0 +1,42 @@
+package com.baeldung.jacksonannotation.deserialization.jsondeserialize;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
+
+import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class CustomDateDeserializer extends StdDeserializer {
+
+ private static SimpleDateFormat formatter =
+ new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
+
+ public CustomDateDeserializer() {
+ this(null);
+ }
+
+ public CustomDateDeserializer(Class> vc) {
+ super(vc);
+ }
+
+ @Override
+ public Date deserialize(JsonParser jsonparser, DeserializationContext context)
+ throws IOException, JsonProcessingException {
+ String date = jsonparser.getText();
+ try {
+ return formatter.parse(date);
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsondeserialize/Item.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsondeserialize/Item.java
new file mode 100644
index 0000000000..9b6652c8dd
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsondeserialize/Item.java
@@ -0,0 +1,61 @@
+package com.baeldung.jacksonannotation.deserialization.jsondeserialize;
+
+import com.baeldung.jacksonannotation.domain.Person;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Item {
+
+ private UUID id;
+ private String title;
+ private List authors = new ArrayList<>();
+ private float price;
+
+ public Item(){}
+
+ public Item(String title, Author author) {
+ this.id = UUID.randomUUID();
+ this.title = title;
+ this.authors.add(author);
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public List getAuthors() {
+ return authors;
+ }
+
+ public void setAuthors(List authors) {
+ this.authors = authors;
+ }
+
+ public float getPrice() {
+ return price;
+ }
+
+ public void setPrice(float price) {
+ this.price = price;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsonsetter/Author.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsonsetter/Author.java
new file mode 100644
index 0000000000..1adf31bb3b
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/deserialization/jsonsetter/Author.java
@@ -0,0 +1,38 @@
+package com.baeldung.jacksonannotation.deserialization.jsonsetter;
+
+import com.baeldung.jacksonannotation.domain.Item;
+import com.baeldung.jacksonannotation.domain.Person;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonSetter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Author extends Person {
+
+ private List
- items = new ArrayList<>();
+
+ public Author(){
+ super();
+ }
+
+ public Author(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ @JsonIgnore
+ public List
- getItems() {
+ return items;
+ }
+
+ @JsonSetter("publications")
+ public void setItems(List
- items) {
+ this.items = items;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Author.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Author.java
new file mode 100644
index 0000000000..7bf0031a18
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Author.java
@@ -0,0 +1,27 @@
+package com.baeldung.jacksonannotation.domain;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Author extends Person {
+
+ private List
- items = new ArrayList<>();
+
+ public Author(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ public List
- getItems() {
+ return items;
+ }
+
+ public void setItems(List
- items) {
+ this.items = items;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Book.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Book.java
new file mode 100644
index 0000000000..e242406446
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Book.java
@@ -0,0 +1,48 @@
+package com.baeldung.jacksonannotation.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Book extends Item {
+
+ private String ISBN;
+ private Date published;
+ private BigDecimal pages;
+
+ public Book(){
+ }
+
+ public Book(String title, Author author) {
+ super(title, author);
+ }
+
+ public String getISBN() {
+ return ISBN;
+ }
+
+ public void setISBN(String ISBN) {
+ this.ISBN = ISBN;
+ }
+
+ public Date getPublished() {
+ return published;
+ }
+
+ public void setPublished(Date published) {
+ this.published = published;
+ }
+
+ public BigDecimal getPages() {
+ return pages;
+ }
+
+ public void setPages(BigDecimal pages) {
+ this.pages = pages;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Course.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Course.java
new file mode 100644
index 0000000000..f0c37cc0bd
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Course.java
@@ -0,0 +1,71 @@
+package com.baeldung.jacksonannotation.domain;
+
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Course extends Item {
+
+ public enum Medium {CLASSROOM, ONLINE}
+
+ public enum Level {
+ BEGINNER("Beginner", 1), INTERMEDIATE("Intermediate", 2), ADVANCED("Advanced", 3);
+
+ private String name;
+ private int number;
+
+ Level(String name, int number) {
+ this.name = name;
+ this.number = number;
+ }
+
+ public String getName() {
+ return name;
+ }
+ }
+
+ private float duration;
+ private Medium medium;
+ private Level level;
+ private List prerequisite;
+
+ public Course(String title, Author author) {
+ super(title, author);
+ }
+
+ public float getDuration() {
+ return duration;
+ }
+
+ public void setDuration(float duration) {
+ this.duration = duration;
+ }
+
+ public Medium getMedium() {
+ return medium;
+ }
+
+ public void setMedium(Medium medium) {
+ this.medium = medium;
+ }
+
+ public Level getLevel() {
+ return level;
+ }
+
+ public void setLevel(Level level) {
+ this.level = level;
+ }
+
+ public List getPrerequisite() {
+ return prerequisite;
+ }
+
+ public void setPrerequisite(List prerequisite) {
+ this.prerequisite = prerequisite;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Customer.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Customer.java
new file mode 100644
index 0000000000..add568b9d4
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Customer.java
@@ -0,0 +1,24 @@
+package com.baeldung.jacksonannotation.domain;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Customer extends Person {
+
+ private String configuration;
+
+ public Customer(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ public String getConfiguration() {
+ return configuration;
+ }
+
+ public void setConfiguration(String configuration) {
+ this.configuration = configuration;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Inventory.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Inventory.java
new file mode 100644
index 0000000000..f5320e6f4b
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Inventory.java
@@ -0,0 +1,29 @@
+package com.baeldung.jacksonannotation.domain;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Inventory {
+
+ private Map stock;
+
+ private Map countryDeliveryCost = new HashMap<>();
+
+ public Map getStock() {
+ return stock;
+ }
+
+ public void setStock(Map stock) {
+ this.stock = stock;
+ }
+
+ public Map getCountryDeliveryCost() {
+ return countryDeliveryCost;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Item.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Item.java
new file mode 100644
index 0000000000..315e411f9d
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Item.java
@@ -0,0 +1,59 @@
+package com.baeldung.jacksonannotation.domain;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Item {
+
+ private UUID id;
+ private String title;
+ private List authors = new ArrayList<>();
+ private float price;
+
+ public Item(){}
+
+ public Item(String title, Author author) {
+ this.id = UUID.randomUUID();
+ this.title = title;
+ this.authors.add(author);
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public List getAuthors() {
+ return authors;
+ }
+
+ public void setAuthors(List authors) {
+ this.authors = authors;
+ }
+
+ public float getPrice() {
+ return price;
+ }
+
+ public void setPrice(float price) {
+ this.price = price;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Order.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Order.java
new file mode 100644
index 0000000000..85cf74d020
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Order.java
@@ -0,0 +1,50 @@
+package com.baeldung.jacksonannotation.domain;
+
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Order {
+
+ private UUID id;
+ private Type type;
+ private int internalAudit;
+
+ public static class Type {
+ public long id;
+ public String name;
+ }
+
+ public Order() {
+ this.id = UUID.randomUUID();
+ }
+
+ public Order(Type type) {
+ this();
+ this.type = type;
+ }
+
+ public Order(int internalAudit) {
+ this();
+ this.type = new Type();
+ this.type.id = 20;
+ this.type.name = "Order";
+ this.internalAudit = internalAudit;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public Type getType() {
+ return type;
+ }
+
+ public void setType(Type type) {
+ this.type = type;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Person.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Person.java
new file mode 100644
index 0000000000..f4c332b008
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/domain/Person.java
@@ -0,0 +1,44 @@
+package com.baeldung.jacksonannotation.domain;
+
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Person {
+
+ private UUID id;
+ private String firstName;
+ private String lastName;
+
+ public Person(){}
+
+ public Person(String firstName, String lastName) {
+ this.id = UUID.randomUUID();
+ this.firstName = firstName;
+ this.lastName = lastName;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonfilter/Author.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonfilter/Author.java
new file mode 100644
index 0000000000..71dcf3bcfa
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonfilter/Author.java
@@ -0,0 +1,32 @@
+package com.baeldung.jacksonannotation.general.jsonfilter;
+
+import com.baeldung.jacksonannotation.domain.Item;
+import com.baeldung.jacksonannotation.domain.Person;
+import com.fasterxml.jackson.annotation.JsonFilter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+@JsonFilter("authorFilter")
+public class Author extends Person {
+
+ private List
- items = new ArrayList<>();
+
+ public Author(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ public List
- getItems() {
+ return items;
+ }
+
+ public void setItems(List
- items) {
+ this.items = items;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonformat/Book.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonformat/Book.java
new file mode 100644
index 0000000000..95fb962118
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonformat/Book.java
@@ -0,0 +1,56 @@
+package com.baeldung.jacksonannotation.general.jsonformat;
+
+import com.baeldung.jacksonannotation.domain.Author;
+import com.baeldung.jacksonannotation.domain.Item;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Book extends Item {
+
+ private String ISBN;
+
+ @JsonFormat(
+ shape = JsonFormat.Shape.STRING,
+ pattern = "dd-MM-yyyy HH:mm:ss")
+ private Date published;
+ private BigDecimal pages;
+
+ public Book() {
+ }
+
+ public Book(String title, Author author) {
+ super(title, author);
+ }
+
+ public String getISBN() {
+ return ISBN;
+ }
+
+ public void setISBN(String ISBN) {
+ this.ISBN = ISBN;
+ }
+
+ public Date getPublished() {
+ return published;
+ }
+
+ public void setPublished(Date published) {
+ this.published = published;
+ }
+
+ public BigDecimal getPages() {
+ return pages;
+ }
+
+ public void setPages(BigDecimal pages) {
+ this.pages = pages;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonidentityinfo/Author.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonidentityinfo/Author.java
new file mode 100644
index 0000000000..f25a0f3a82
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonidentityinfo/Author.java
@@ -0,0 +1,33 @@
+package com.baeldung.jacksonannotation.general.jsonidentityinfo;
+
+import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+@JsonIdentityInfo(
+ generator = ObjectIdGenerators.PropertyGenerator.class,
+ property = "id")
+public class Author extends Person {
+
+ private List
- items = new ArrayList<>();
+
+ public Author(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ public List
- getItems() {
+ return items;
+ }
+
+ public void setItems(List
- items) {
+ this.items = items;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonidentityinfo/Course.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonidentityinfo/Course.java
new file mode 100644
index 0000000000..02557d21fc
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonidentityinfo/Course.java
@@ -0,0 +1,72 @@
+package com.baeldung.jacksonannotation.general.jsonidentityinfo;
+
+
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Course extends Item {
+
+ public enum Medium {CLASSROOM, ONLINE}
+
+ public enum Level {
+ BEGINNER("Beginner", 1), INTERMEDIATE("Intermediate", 2), ADVANCED("Advanced", 3);
+
+ private String name;
+ private int number;
+
+ Level(String name, int number) {
+ this.name = name;
+ this.number = number;
+ }
+
+ public String getName() {
+ return name;
+ }
+ }
+
+ private float duration;
+ private Medium medium;
+ private Level level;
+ private List prerequisite;
+
+ public Course(String title, Author author) {
+ super(title, author);
+ }
+
+ public float getDuration() {
+ return duration;
+ }
+
+ public void setDuration(float duration) {
+ this.duration = duration;
+ }
+
+ public Medium getMedium() {
+ return medium;
+ }
+
+ public void setMedium(Medium medium) {
+ this.medium = medium;
+ }
+
+ public Level getLevel() {
+ return level;
+ }
+
+ public void setLevel(Level level) {
+ this.level = level;
+ }
+
+ public List getPrerequisite() {
+ return prerequisite;
+ }
+
+ public void setPrerequisite(List prerequisite) {
+ this.prerequisite = prerequisite;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonidentityinfo/Item.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonidentityinfo/Item.java
new file mode 100644
index 0000000000..6d28e313f7
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonidentityinfo/Item.java
@@ -0,0 +1,65 @@
+package com.baeldung.jacksonannotation.general.jsonidentityinfo;
+
+import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+@JsonIdentityInfo(
+ generator = ObjectIdGenerators.PropertyGenerator.class,
+ property = "id")
+public class Item {
+
+ private UUID id;
+ private String title;
+ private List authors = new ArrayList<>();
+ private float price;
+
+ public Item(){}
+
+ public Item(String title, Author author) {
+ this.id = UUID.randomUUID();
+ this.title = title;
+ this.authors.add(author);
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public List getAuthors() {
+ return authors;
+ }
+
+ public void setAuthors(List authors) {
+ this.authors = authors;
+ }
+
+ public float getPrice() {
+ return price;
+ }
+
+ public void setPrice(float price) {
+ this.price = price;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonidentityinfo/Person.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonidentityinfo/Person.java
new file mode 100644
index 0000000000..38a23ebffd
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonidentityinfo/Person.java
@@ -0,0 +1,44 @@
+package com.baeldung.jacksonannotation.general.jsonidentityinfo;
+
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Person {
+
+ private UUID id;
+ private String firstName;
+ private String lastName;
+
+ public Person(){}
+
+ public Person(String firstName, String lastName) {
+ this.id = UUID.randomUUID();
+ this.firstName = firstName;
+ this.lastName = lastName;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonproperty/Author.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonproperty/Author.java
new file mode 100644
index 0000000000..c1507f43d3
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonproperty/Author.java
@@ -0,0 +1,29 @@
+package com.baeldung.jacksonannotation.general.jsonproperty;
+
+import com.baeldung.jacksonannotation.domain.Person;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Author extends Person {
+
+ private List
- items = new ArrayList<>();
+
+ public Author(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ public List
- getItems() {
+ return items;
+ }
+
+ public void setItems(List
- items) {
+ this.items = items;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonproperty/Book.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonproperty/Book.java
new file mode 100644
index 0000000000..d17fef2e46
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonproperty/Book.java
@@ -0,0 +1,61 @@
+package com.baeldung.jacksonannotation.general.jsonproperty;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Book extends Item {
+
+ private String ISBN;
+ private Date published;
+ private BigDecimal pages;
+ private String binding;
+
+ public Book() {
+ }
+
+ public Book(String title, Author author) {
+ super(title, author);
+ }
+
+ public String getISBN() {
+ return ISBN;
+ }
+
+ public void setISBN(String ISBN) {
+ this.ISBN = ISBN;
+ }
+
+ public Date getPublished() {
+ return published;
+ }
+
+ public void setPublished(Date published) {
+ this.published = published;
+ }
+
+ public BigDecimal getPages() {
+ return pages;
+ }
+
+ public void setPages(BigDecimal pages) {
+ this.pages = pages;
+ }
+
+ @JsonProperty("binding")
+ public String coverBinding() {
+ return binding;
+ }
+
+ @JsonProperty("binding")
+ public void configureBinding(String binding) {
+ this.binding = binding;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonproperty/Item.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonproperty/Item.java
new file mode 100644
index 0000000000..5e189f9f9d
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonproperty/Item.java
@@ -0,0 +1,61 @@
+package com.baeldung.jacksonannotation.general.jsonproperty;
+
+import com.baeldung.jacksonannotation.domain.Person;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Item {
+
+ private UUID id;
+ private String title;
+ private List authors = new ArrayList<>();
+ private float price;
+
+ public Item(){}
+
+ public Item(String title, Author author) {
+ this.id = UUID.randomUUID();
+ this.title = title;
+ this.authors.add(author);
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public List getAuthors() {
+ return authors;
+ }
+
+ public void setAuthors(List authors) {
+ this.authors = authors;
+ }
+
+ public float getPrice() {
+ return price;
+ }
+
+ public void setPrice(float price) {
+ this.price = price;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonunwrapped/Order.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonunwrapped/Order.java
new file mode 100644
index 0000000000..971f0a13c9
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonunwrapped/Order.java
@@ -0,0 +1,54 @@
+package com.baeldung.jacksonannotation.general.jsonunwrapped;
+
+import com.fasterxml.jackson.annotation.JsonUnwrapped;
+
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Order {
+
+ private UUID id;
+
+ @JsonUnwrapped
+ private Type type;
+ private int internalAudit;
+
+ public static class Type {
+ public long id;
+ public String name;
+ }
+
+ public Order() {
+ this.id = UUID.randomUUID();
+ }
+
+ public Order(Type type) {
+ this();
+ this.type = type;
+ }
+
+ public Order(int internalAudit) {
+ this();
+ this.type = new Type();
+ this.type.id = 20;
+ this.type.name = "Order";
+ this.internalAudit = internalAudit;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public Type getType() {
+ return type;
+ }
+
+ public void setType(Type type) {
+ this.type = type;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonview/Order.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonview/Order.java
new file mode 100644
index 0000000000..7a9c6f3930
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonview/Order.java
@@ -0,0 +1,57 @@
+package com.baeldung.jacksonannotation.general.jsonview;
+
+import com.fasterxml.jackson.annotation.JsonView;
+
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Order {
+
+ @JsonView(Views.Public.class)
+ private UUID id;
+
+ @JsonView(Views.Public.class)
+ private Type type;
+
+ @JsonView(Views.Internal.class)
+ private int internalAudit;
+
+ public static class Type {
+ public long id;
+ public String name;
+ }
+
+ public Order() {
+ this.id = UUID.randomUUID();
+ }
+
+ public Order(Type type) {
+ this();
+ this.type = type;
+ }
+
+ public Order(int internalAudit) {
+ this();
+ this.type = new Type();
+ this.type.id = 20;
+ this.type.name = "Order";
+ this.internalAudit = internalAudit;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public Type getType() {
+ return type;
+ }
+
+ public void setType(Type type) {
+ this.type = type;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonview/Views.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonview/Views.java
new file mode 100644
index 0000000000..87cb3db9ea
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/jsonview/Views.java
@@ -0,0 +1,15 @@
+package com.baeldung.jacksonannotation.general.jsonview;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Views {
+ public static class Public {
+ }
+
+ public static class Internal extends Public {
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/reference/Author.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/reference/Author.java
new file mode 100644
index 0000000000..8f99d35af0
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/reference/Author.java
@@ -0,0 +1,30 @@
+package com.baeldung.jacksonannotation.general.reference;
+
+import com.fasterxml.jackson.annotation.JsonManagedReference;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Author extends Person {
+
+ private List
- items = new ArrayList<>();
+
+ public Author(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ @JsonManagedReference
+ public List
- getItems() {
+ return items;
+ }
+
+ public void setItems(List
- items) {
+ this.items = items;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/reference/Course.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/reference/Course.java
new file mode 100644
index 0000000000..12c317d5c3
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/reference/Course.java
@@ -0,0 +1,72 @@
+package com.baeldung.jacksonannotation.general.reference;
+
+
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Course extends Item {
+
+ public enum Medium {CLASSROOM, ONLINE}
+
+ public enum Level {
+ BEGINNER("Beginner", 1), INTERMEDIATE("Intermediate", 2), ADVANCED("Advanced", 3);
+
+ private String name;
+ private int number;
+
+ Level(String name, int number) {
+ this.name = name;
+ this.number = number;
+ }
+
+ public String getName() {
+ return name;
+ }
+ }
+
+ private float duration;
+ private Medium medium;
+ private Level level;
+ private List prerequisite;
+
+ public Course(String title, Author author) {
+ super(title, author);
+ }
+
+ public float getDuration() {
+ return duration;
+ }
+
+ public void setDuration(float duration) {
+ this.duration = duration;
+ }
+
+ public Medium getMedium() {
+ return medium;
+ }
+
+ public void setMedium(Medium medium) {
+ this.medium = medium;
+ }
+
+ public Level getLevel() {
+ return level;
+ }
+
+ public void setLevel(Level level) {
+ this.level = level;
+ }
+
+ public List getPrerequisite() {
+ return prerequisite;
+ }
+
+ public void setPrerequisite(List prerequisite) {
+ this.prerequisite = prerequisite;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/reference/Item.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/reference/Item.java
new file mode 100644
index 0000000000..b596cf0017
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/reference/Item.java
@@ -0,0 +1,63 @@
+package com.baeldung.jacksonannotation.general.reference;
+
+import com.fasterxml.jackson.annotation.JsonBackReference;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Item {
+
+ private UUID id;
+ private String title;
+
+ @JsonBackReference
+ private List authors = new ArrayList<>();
+ private float price;
+
+ public Item(){}
+
+ public Item(String title, Author author) {
+ this.id = UUID.randomUUID();
+ this.title = title;
+ this.authors.add(author);
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public List getAuthors() {
+ return authors;
+ }
+
+ public void setAuthors(List authors) {
+ this.authors = authors;
+ }
+
+ public float getPrice() {
+ return price;
+ }
+
+ public void setPrice(float price) {
+ this.price = price;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/reference/Person.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/reference/Person.java
new file mode 100644
index 0000000000..f5303c6a17
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/general/reference/Person.java
@@ -0,0 +1,44 @@
+package com.baeldung.jacksonannotation.general.reference;
+
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Person {
+
+ private UUID id;
+ private String firstName;
+ private String lastName;
+
+ public Person(){}
+
+ public Person(String firstName, String lastName) {
+ this.id = UUID.randomUUID();
+ this.firstName = firstName;
+ this.lastName = lastName;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/inclusion/jsonautodetect/Order.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/inclusion/jsonautodetect/Order.java
new file mode 100644
index 0000000000..4ebbbde984
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/inclusion/jsonautodetect/Order.java
@@ -0,0 +1,54 @@
+package com.baeldung.jacksonannotation.inclusion.jsonautodetect;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+@JsonAutoDetect(fieldVisibility = Visibility.ANY)
+public class Order {
+
+ private UUID id;
+ private Type type;
+ private int internalAudit;
+
+ public static class Type {
+ public long id;
+ public String name;
+ }
+
+ public Order() {
+ this.id = UUID.randomUUID();
+ }
+
+ public Order(Type type) {
+ this();
+ this.type = type;
+ }
+
+ public Order(int internalAudit) {
+ this();
+ this.type = new Type();
+ this.type.id = 20;
+ this.type.name = "Order";
+ this.internalAudit = internalAudit;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public Type getType() {
+ return type;
+ }
+
+ public void setType(Type type) {
+ this.type = type;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/inclusion/jsonignore/Author.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/inclusion/jsonignore/Author.java
new file mode 100644
index 0000000000..2d8676deaf
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/inclusion/jsonignore/Author.java
@@ -0,0 +1,29 @@
+package com.baeldung.jacksonannotation.inclusion.jsonignore;
+
+import com.baeldung.jacksonannotation.domain.Item;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Author extends Person {
+
+ private List
- items = new ArrayList<>();
+
+ public Author(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ public List
- getItems() {
+ return items;
+ }
+
+ public void setItems(List
- items) {
+ this.items = items;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/inclusion/jsonignore/Person.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/inclusion/jsonignore/Person.java
new file mode 100644
index 0000000000..eb4ff77f42
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/inclusion/jsonignore/Person.java
@@ -0,0 +1,47 @@
+package com.baeldung.jacksonannotation.inclusion.jsonignore;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Person {
+
+ @JsonIgnore
+ private UUID id;
+ private String firstName;
+ private String lastName;
+
+ public Person(){}
+
+ public Person(String firstName, String lastName) {
+ this.id = UUID.randomUUID();
+ this.firstName = firstName;
+ this.lastName = lastName;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/inclusion/jsonignoreproperties/Course.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/inclusion/jsonignoreproperties/Course.java
new file mode 100644
index 0000000000..8b61f5a215
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/inclusion/jsonignoreproperties/Course.java
@@ -0,0 +1,76 @@
+package com.baeldung.jacksonannotation.inclusion.jsonignoreproperties;
+
+import com.baeldung.jacksonannotation.domain.Author;
+import com.baeldung.jacksonannotation.domain.Item;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+@JsonIgnoreProperties({"medium"})
+public class Course extends Item {
+
+ public enum Medium {CLASSROOM, ONLINE}
+
+ public enum Level {
+ BEGINNER("Beginner", 1), INTERMEDIATE("Intermediate", 2), ADVANCED("Advanced", 3);
+
+ private String name;
+ private int number;
+
+ Level(String name, int number) {
+ this.name = name;
+ this.number = number;
+ }
+
+ public String getName() {
+ return name;
+ }
+ }
+
+ private float duration;
+ private Medium medium;
+ private Level level;
+ private List prerequisite;
+
+ public Course(String title, Author author) {
+ super(title, author);
+ }
+
+ public float getDuration() {
+ return duration;
+ }
+
+ public void setDuration(float duration) {
+ this.duration = duration;
+ }
+
+ public Medium getMedium() {
+ return medium;
+ }
+
+ public void setMedium(Medium medium) {
+ this.medium = medium;
+ }
+
+ public Level getLevel() {
+ return level;
+ }
+
+ public void setLevel(Level level) {
+ this.level = level;
+ }
+
+ public List getPrerequisite() {
+ return prerequisite;
+ }
+
+ public void setPrerequisite(List prerequisite) {
+ this.prerequisite = prerequisite;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/inclusion/jsonignoretype/Order.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/inclusion/jsonignoretype/Order.java
new file mode 100644
index 0000000000..df4e167163
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/inclusion/jsonignoretype/Order.java
@@ -0,0 +1,44 @@
+package com.baeldung.jacksonannotation.inclusion.jsonignoretype;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreType;
+
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Order {
+
+ private UUID id;
+ private Type type;
+
+ @JsonIgnoreType
+ public static class Type {
+ public long id;
+ public String name;
+ }
+
+ public Order() {
+ this.id = UUID.randomUUID();
+ }
+
+ public Order(Type type) {
+ this();
+ this.type = type;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public Type getType() {
+ return type;
+ }
+
+ public void setType(Type type) {
+ this.type = type;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/inclusion/jsoninclude/Author.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/inclusion/jsoninclude/Author.java
new file mode 100644
index 0000000000..d5c20de2f5
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/inclusion/jsoninclude/Author.java
@@ -0,0 +1,34 @@
+package com.baeldung.jacksonannotation.inclusion.jsoninclude;
+
+import com.baeldung.jacksonannotation.domain.Item;
+import com.baeldung.jacksonannotation.domain.Person;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+@JsonInclude(NON_NULL)
+public class Author extends Person {
+
+ private List
- items = new ArrayList<>();
+
+ public Author(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ public List
- getItems() {
+ return items;
+ }
+
+ public void setItems(List
- items) {
+ this.items = items;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/miscellaneous/custom/Course.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/miscellaneous/custom/Course.java
new file mode 100644
index 0000000000..6a0c3edec0
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/miscellaneous/custom/Course.java
@@ -0,0 +1,74 @@
+package com.baeldung.jacksonannotation.miscellaneous.custom;
+
+import com.baeldung.jacksonannotation.domain.Author;
+
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+@CustomCourseAnnotation
+public class Course extends Item {
+
+ public enum Medium {CLASSROOM, ONLINE}
+
+ public enum Level {
+ BEGINNER("Beginner", 1), INTERMEDIATE("Intermediate", 2), ADVANCED("Advanced", 3);
+
+ private String name;
+ private int number;
+
+ Level(String name, int number) {
+ this.name = name;
+ this.number = number;
+ }
+
+ public String getName() {
+ return name;
+ }
+ }
+
+ private float duration;
+ private Medium medium;
+ private Level level;
+ private List prerequisite;
+
+ public Course(String title, Author author) {
+ super(title, author);
+ }
+
+ public float getDuration() {
+ return duration;
+ }
+
+ public void setDuration(float duration) {
+ this.duration = duration;
+ }
+
+ public Medium getMedium() {
+ return medium;
+ }
+
+ public void setMedium(Medium medium) {
+ this.medium = medium;
+ }
+
+ public Level getLevel() {
+ return level;
+ }
+
+ public void setLevel(Level level) {
+ this.level = level;
+ }
+
+ public List getPrerequisite() {
+ return prerequisite;
+ }
+
+ public void setPrerequisite(List prerequisite) {
+ this.prerequisite = prerequisite;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/miscellaneous/custom/CustomCourseAnnotation.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/miscellaneous/custom/CustomCourseAnnotation.java
new file mode 100644
index 0000000000..d2185ae4bf
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/miscellaneous/custom/CustomCourseAnnotation.java
@@ -0,0 +1,20 @@
+package com.baeldung.jacksonannotation.miscellaneous.custom;
+
+import com.fasterxml.jackson.annotation.*;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@JacksonAnnotationsInside
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonPropertyOrder({"title", "price", "id", "duration", "authors", "level"})
+@JsonIgnoreProperties({"prerequisite"})
+public @interface CustomCourseAnnotation {
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/miscellaneous/custom/Item.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/miscellaneous/custom/Item.java
new file mode 100644
index 0000000000..327798d277
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/miscellaneous/custom/Item.java
@@ -0,0 +1,62 @@
+package com.baeldung.jacksonannotation.miscellaneous.custom;
+
+import com.baeldung.jacksonannotation.domain.Author;
+import com.baeldung.jacksonannotation.domain.Person;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Item {
+
+ private UUID id;
+ private String title;
+ private List authors = new ArrayList<>();
+ private float price;
+
+ public Item(){}
+
+ public Item(String title, Author author) {
+ this.id = UUID.randomUUID();
+ this.title = title;
+ this.authors.add(author);
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public List getAuthors() {
+ return authors;
+ }
+
+ public void setAuthors(List authors) {
+ this.authors = authors;
+ }
+
+ public float getPrice() {
+ return price;
+ }
+
+ public void setPrice(float price) {
+ this.price = price;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/miscellaneous/disable/Author.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/miscellaneous/disable/Author.java
new file mode 100644
index 0000000000..851ba5f40f
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/miscellaneous/disable/Author.java
@@ -0,0 +1,36 @@
+package com.baeldung.jacksonannotation.miscellaneous.disable;
+
+import com.baeldung.jacksonannotation.domain.Item;
+import com.baeldung.jacksonannotation.domain.Person;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonPropertyOrder({"lastName", "items", "firstName", "id"})
+public class Author extends Person {
+
+ @JsonIgnore
+ private List
- items = new ArrayList<>();
+
+ public Author(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ public List
- getItems() {
+ return items;
+ }
+
+ public void setItems(List
- items) {
+ this.items = items;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/miscellaneous/mixin/Author.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/miscellaneous/mixin/Author.java
new file mode 100644
index 0000000000..4ee9351afb
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/miscellaneous/mixin/Author.java
@@ -0,0 +1,30 @@
+package com.baeldung.jacksonannotation.miscellaneous.mixin;
+
+import com.baeldung.jacksonannotation.domain.Item;
+import com.baeldung.jacksonannotation.domain.Person;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Author extends Person {
+
+ private List
- items = new ArrayList<>();
+
+ public Author(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ public List
- getItems() {
+ return items;
+ }
+
+ public void setItems(List
- items) {
+ this.items = items;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/miscellaneous/mixin/IgnoreListMixIn.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/miscellaneous/mixin/IgnoreListMixIn.java
new file mode 100644
index 0000000000..c7ead90137
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/miscellaneous/mixin/IgnoreListMixIn.java
@@ -0,0 +1,13 @@
+package com.baeldung.jacksonannotation.miscellaneous.mixin;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreType;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+@JsonIgnoreType
+public class IgnoreListMixIn {
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/polymorphism/Order.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/polymorphism/Order.java
new file mode 100644
index 0000000000..6f1494988f
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/polymorphism/Order.java
@@ -0,0 +1,66 @@
+package com.baeldung.jacksonannotation.polymorphism;
+
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Order {
+
+ private UUID id;
+ private Type type;
+ private int internalAudit;
+
+ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.PROPERTY,
+ property = "ordertype")
+ @JsonSubTypes({
+ @JsonSubTypes.Type(value = InternalType.class, name = "internal")
+ })
+ public static class Type {
+ public long id;
+ public String name;
+ }
+
+ @JsonTypeName("internal")
+ public static class InternalType extends Type {
+ public long id;
+ public String name;
+ }
+
+ public Order() {
+ this.id = UUID.randomUUID();
+ }
+
+ public Order(Type type) {
+ this();
+ this.type = type;
+ }
+
+ public Order(int internalAudit) {
+ this();
+ this.type = new Type();
+ this.type.id = 20;
+ this.type.name = "Order";
+ this.internalAudit = internalAudit;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public Type getType() {
+ return type;
+ }
+
+ public void setType(Type type) {
+ this.type = type;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonanygetter/Inventory.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonanygetter/Inventory.java
new file mode 100644
index 0000000000..a6938de496
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonanygetter/Inventory.java
@@ -0,0 +1,43 @@
+package com.baeldung.jacksonannotation.serialization.jsonanygetter;
+
+import com.baeldung.jacksonannotation.domain.Author;
+import com.baeldung.jacksonannotation.domain.Item;
+import com.fasterxml.jackson.annotation.JsonAnyGetter;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Inventory {
+
+ private String location;
+
+ private Map stock = new HashMap<>();
+
+ private Map countryDeliveryCost = new HashMap<>();
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ @JsonIgnore
+ public Map getStock() {
+ return stock;
+ }
+
+ @JsonAnyGetter
+ public Map getCountryDeliveryCost() {
+ return countryDeliveryCost;
+ }
+
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsongetter/Author.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsongetter/Author.java
new file mode 100644
index 0000000000..eccc306b45
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsongetter/Author.java
@@ -0,0 +1,33 @@
+package com.baeldung.jacksonannotation.serialization.jsongetter;
+
+
+import com.baeldung.jacksonannotation.domain.Item;
+import com.baeldung.jacksonannotation.domain.Person;
+import com.fasterxml.jackson.annotation.JsonGetter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Author extends Person {
+
+ List
- items = new ArrayList<>();
+
+ public Author(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ @JsonGetter("publications")
+ public List
- getItems() {
+ return items;
+ }
+
+ public void setItems(List
- items) {
+ this.items = items;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonpropertyorder/Author.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonpropertyorder/Author.java
new file mode 100644
index 0000000000..fae2d52dcb
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonpropertyorder/Author.java
@@ -0,0 +1,52 @@
+package com.baeldung.jacksonannotation.serialization.jsonpropertyorder;
+
+
+import com.baeldung.jacksonannotation.domain.Item;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+@JsonPropertyOrder(value = {"items", "firstName", "lastName", "id"}, alphabetic = true)
+public class Author extends Person {
+
+ private String zIndex;
+
+ private String alphaIndex;
+
+ List
- items = new ArrayList<>();
+
+ public Author(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ public List
- getItems() {
+ return items;
+ }
+
+ public void setItems(List
- items) {
+ this.items = items;
+ }
+
+ public String getzIndex() {
+ return zIndex;
+ }
+
+ public void setzIndex(String zIndex) {
+ this.zIndex = zIndex;
+ }
+
+ public String getAlphaIndex() {
+ return alphaIndex;
+ }
+
+ public void setAlphaIndex(String alphaIndex) {
+ this.alphaIndex = alphaIndex;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonpropertyorder/Person.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonpropertyorder/Person.java
new file mode 100644
index 0000000000..c976015001
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonpropertyorder/Person.java
@@ -0,0 +1,42 @@
+package com.baeldung.jacksonannotation.serialization.jsonpropertyorder;
+
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Person {
+
+ private UUID id;
+ private String firstName;
+ private String lastName;
+
+ public Person(String firstName, String lastName) {
+ this.id = UUID.randomUUID();
+ this.firstName = firstName;
+ this.lastName = lastName;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonrawvalue/Customer.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonrawvalue/Customer.java
new file mode 100644
index 0000000000..f4235e4afc
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonrawvalue/Customer.java
@@ -0,0 +1,28 @@
+package com.baeldung.jacksonannotation.serialization.jsonrawvalue;
+
+import com.baeldung.jacksonannotation.domain.Person;
+import com.fasterxml.jackson.annotation.JsonRawValue;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Customer extends Person {
+
+ @JsonRawValue
+ private String configuration;
+
+ public Customer(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ public String getConfiguration() {
+ return configuration;
+ }
+
+ public void setConfiguration(String configuration) {
+ this.configuration = configuration;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonrootname/Author.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonrootname/Author.java
new file mode 100644
index 0000000000..b7c527c06f
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonrootname/Author.java
@@ -0,0 +1,32 @@
+package com.baeldung.jacksonannotation.serialization.jsonrootname;
+
+import com.baeldung.jacksonannotation.domain.Item;
+import com.baeldung.jacksonannotation.domain.Person;
+import com.fasterxml.jackson.annotation.JsonRootName;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+@JsonRootName("writer")
+public class Author extends Person {
+
+ List
- items = new ArrayList<>();
+
+ public Author(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ public List
- getItems() {
+ return items;
+ }
+
+ public void setItems(List
- items) {
+ this.items = items;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonserialize/Author.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonserialize/Author.java
new file mode 100644
index 0000000000..4c14f6375f
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonserialize/Author.java
@@ -0,0 +1,30 @@
+package com.baeldung.jacksonannotation.serialization.jsonserialize;
+
+import com.baeldung.jacksonannotation.domain.Item;
+import com.baeldung.jacksonannotation.domain.Person;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Author extends Person {
+
+ List
- items = new ArrayList<>();
+
+ public Author(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ public List
- getItems() {
+ return items;
+ }
+
+ public void setItems(List
- items) {
+ this.items = items;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonserialize/Book.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonserialize/Book.java
new file mode 100644
index 0000000000..8e059c9fe5
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonserialize/Book.java
@@ -0,0 +1,53 @@
+package com.baeldung.jacksonannotation.serialization.jsonserialize;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Book extends Item {
+
+ private String ISBN;
+
+ @JsonSerialize(using = CustomDateSerializer.class)
+ private Date published;
+ private BigDecimal pages;
+
+ public Book(){
+ super();
+ }
+
+ public Book(String title, Author author) {
+ super(title, author);
+ }
+
+ public String getISBN() {
+ return ISBN;
+ }
+
+ public void setISBN(String ISBN) {
+ this.ISBN = ISBN;
+ }
+
+ public Date getPublished() {
+ return published;
+ }
+
+ public void setPublished(Date published) {
+ this.published = published;
+ }
+
+ public BigDecimal getPages() {
+ return pages;
+ }
+
+ public void setPages(BigDecimal pages) {
+ this.pages = pages;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonserialize/CustomDateSerializer.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonserialize/CustomDateSerializer.java
new file mode 100644
index 0000000000..8dacf1f2db
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonserialize/CustomDateSerializer.java
@@ -0,0 +1,36 @@
+package com.baeldung.jacksonannotation.serialization.jsonserialize;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.ser.std.StdSerializer;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class CustomDateSerializer extends StdSerializer {
+
+ private static SimpleDateFormat formatter =
+ new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
+
+ public CustomDateSerializer() {
+ this(null);
+ }
+
+ public CustomDateSerializer(Class t) {
+ super(t);
+ }
+
+ @Override
+ public void serialize(Date value, JsonGenerator gen, SerializerProvider arg2)
+ throws IOException, JsonProcessingException {
+ gen.writeString(formatter.format(value));
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonserialize/Item.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonserialize/Item.java
new file mode 100644
index 0000000000..7d50305399
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonserialize/Item.java
@@ -0,0 +1,61 @@
+package com.baeldung.jacksonannotation.serialization.jsonserialize;
+
+import com.baeldung.jacksonannotation.domain.Person;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Item {
+
+ private UUID id;
+ private String title;
+ private List authors = new ArrayList<>();
+ private float price;
+
+ public Item(){}
+
+ public Item(String title, Author author) {
+ this.id = UUID.randomUUID();
+ this.title = title;
+ this.authors.add(author);
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public List getAuthors() {
+ return authors;
+ }
+
+ public void setAuthors(List authors) {
+ this.authors = authors;
+ }
+
+ public float getPrice() {
+ return price;
+ }
+
+ public void setPrice(float price) {
+ this.price = price;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonvalue/Author.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonvalue/Author.java
new file mode 100644
index 0000000000..6f0a28cc73
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonvalue/Author.java
@@ -0,0 +1,40 @@
+package com.baeldung.jacksonannotation.serialization.jsonvalue;
+
+import com.baeldung.jacksonannotation.domain.Item;
+import com.baeldung.jacksonannotation.domain.Person;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Author extends Person {
+
+ List
- items = new ArrayList<>();
+
+ public Author(String firstName, String lastName) {
+ super(firstName, lastName);
+ }
+
+ public List
- getItems() {
+ return items;
+ }
+
+ public void setItems(List
- items) {
+ this.items = items;
+ }
+
+ @JsonValue
+ public Map toJson() {
+ Map values = new HashMap<>();
+ values.put("name", getFirstName() + " " + getLastName());
+ return values;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonvalue/Course.java b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonvalue/Course.java
new file mode 100644
index 0000000000..7e8b4708ee
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/main/java/com/baeldung/jacksonannotation/serialization/jsonvalue/Course.java
@@ -0,0 +1,76 @@
+package com.baeldung.jacksonannotation.serialization.jsonvalue;
+
+import com.baeldung.jacksonannotation.domain.Author;
+import com.baeldung.jacksonannotation.domain.Item;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+import java.util.List;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class Course extends Item {
+
+ public enum Medium {CLASSROOM, ONLINE}
+
+ public enum Level {
+ BEGINNER("Beginner", 1), INTERMEDIATE("Intermediate", 2), ADVANCED("Advanced", 3);
+
+ private String name;
+ private int number;
+
+ Level(String name, int number) {
+ this.name = name;
+ this.number = number;
+ }
+
+ @JsonValue
+ public String getName() {
+ return name;
+ }
+ }
+
+ private float duration;
+ private Medium medium;
+ private Level level;
+ private List prerequisite;
+
+ public Course(String title, Author author) {
+ super(title, author);
+ }
+
+ public float getDuration() {
+ return duration;
+ }
+
+ public void setDuration(float duration) {
+ this.duration = duration;
+ }
+
+ public Medium getMedium() {
+ return medium;
+ }
+
+ public void setMedium(Medium medium) {
+ this.medium = medium;
+ }
+
+ public Level getLevel() {
+ return level;
+ }
+
+ public void setLevel(Level level) {
+ this.level = level;
+ }
+
+ public List getPrerequisite() {
+ return prerequisite;
+ }
+
+ public void setPrerequisite(List prerequisite) {
+ this.prerequisite = prerequisite;
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/deserialization/jacksoninject/JacksonInjectTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/deserialization/jacksoninject/JacksonInjectTest.java
new file mode 100644
index 0000000000..e6c12f14a6
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/deserialization/jacksoninject/JacksonInjectTest.java
@@ -0,0 +1,45 @@
+package com.baeldung.jacksonannotation.deserialization.jacksoninject;
+
+import com.fasterxml.jackson.databind.InjectableValues;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.UUID;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JacksonInjectTest {
+
+ @Test
+ public void whenDeserializingUsingJacksonInject_thenCorrect() throws IOException {
+
+ UUID id = UUID.fromString("9616dc8c-bad3-11e6-a4a6-cec0c932ce01");
+
+ // arrange
+ String authorJson = "{\"firstName\": \"Alex\", \"lastName\": \"Theedom\"}";
+
+ // act
+ InjectableValues inject = new InjectableValues.Std().addValue(UUID.class, id);
+ Author author = new ObjectMapper().reader(inject).forType(Author.class).readValue(authorJson);
+
+ // assert
+ assertThat(author.getId()).isEqualTo(id);
+
+
+ /*
+ {
+ "firstName": "Alex",
+ "lastName": "Theedom",
+ "publications": []
+ }
+ */
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/deserialization/jsonanysetter/JsonAnySetterTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/deserialization/jsonanysetter/JsonAnySetterTest.java
new file mode 100644
index 0000000000..3d49d699ac
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/deserialization/jsonanysetter/JsonAnySetterTest.java
@@ -0,0 +1,37 @@
+package com.baeldung.jacksonannotation.deserialization.jsonanysetter;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import java.io.IOException;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonAnySetterTest {
+
+ @Test
+ public void whenDeserializingUsingJsonAnySetter_thenCorrect() throws IOException {
+
+ // arrange
+ String json = "{\"USA\":10.00,\"UK\":15.00,\"China\":23.00,\"Brazil\":12.00,\"France\":8.00,\"Russia\":18.00}";
+
+ // act
+ Inventory inventory = new ObjectMapper().readerFor(Inventory.class).readValue(json);
+
+ // assert
+ assertThat(from(json).getMap(".").get("USA")).isEqualTo(inventory.getCountryDeliveryCost().get("USA"));
+ assertThat(from(json).getMap(".").get("UK")).isEqualTo(inventory.getCountryDeliveryCost().get("UK"));
+ assertThat(from(json).getMap(".").get("China")).isEqualTo(inventory.getCountryDeliveryCost().get("China"));
+ assertThat(from(json).getMap(".").get("Brazil")).isEqualTo(inventory.getCountryDeliveryCost().get("Brazil"));
+ assertThat(from(json).getMap(".").get("France")).isEqualTo(inventory.getCountryDeliveryCost().get("France"));
+ assertThat(from(json).getMap(".").get("Russia")).isEqualTo(inventory.getCountryDeliveryCost().get("Russia"));
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/deserialization/jsoncreator/JsonCreatorTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/deserialization/jsoncreator/JsonCreatorTest.java
new file mode 100644
index 0000000000..b40c639042
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/deserialization/jsoncreator/JsonCreatorTest.java
@@ -0,0 +1,44 @@
+package com.baeldung.jacksonannotation.deserialization.jsoncreator;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import java.io.IOException;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonCreatorTest {
+
+ @Test
+ public void whenDeserializingUsingJsonCreator_thenCorrect() throws IOException {
+
+ // arrange
+ String authorJson =
+ "{" +
+ " \"christianName\": \"Alex\"," +
+ " \"surname\": \"Theedom\"" +
+ "}";
+
+ // act
+ final Author author = new ObjectMapper().readerFor(Author.class).readValue(authorJson);
+
+ // assert
+ assertThat(from(authorJson).getString("christianName")).isEqualTo(author.getFirstName());
+ assertThat(from(authorJson).getString("surname")).isEqualTo(author.getLastName());
+
+ /*
+ {
+ "christianName": "Alex",
+ "surname": "Theedom"
+ }
+ */
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/deserialization/jsondeserialize/JsonDeserializeTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/deserialization/jsondeserialize/JsonDeserializeTest.java
new file mode 100644
index 0000000000..77dde1b59b
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/deserialization/jsondeserialize/JsonDeserializeTest.java
@@ -0,0 +1,34 @@
+package com.baeldung.jacksonannotation.deserialization.jsondeserialize;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonDeserializeTest {
+
+ @Test
+ public void whenDeserializingUsingJsonDeserialize_thenCorrect() throws IOException {
+
+ // arrange
+ String bookJson = "{\"id\":\"957c43f2-fa2e-42f9-bf75-6e3d5bb6960a\",\"title\":\"Effective Java\",\"authors\":[{\"id\":\"9bcd817d-0141-42e6-8f04-e5aaab0980b6\",\"firstName\":\"Joshua\",\"lastName\":\"Bloch\"}],\"price\":0,\"published\":\"25-12-2017 13:30:25\",\"pages\":null,\"isbn\":null}";
+
+ // act
+ Book book = new ObjectMapper().readerFor(Book.class).readValue(bookJson);
+
+ // assert
+ SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
+ assertThat(from(bookJson).getString("published")).isEqualTo(df.format(book.getPublished()));
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/deserialization/jsonsetter/JsonSetterTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/deserialization/jsonsetter/JsonSetterTest.java
new file mode 100644
index 0000000000..3a99c972b6
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/deserialization/jsonsetter/JsonSetterTest.java
@@ -0,0 +1,32 @@
+package com.baeldung.jacksonannotation.deserialization.jsonsetter;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import java.io.IOException;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonSetterTest {
+
+ @Test
+ public void whenDeserializingUsingJsonSetter_thenCorrect() throws IOException {
+
+ // arrange
+ String json = "{\"firstName\":\"Alex\",\"lastName\":\"Theedom\",\"publications\":[{\"title\":\"Professional Java EE Design Patterns\"}]}";
+
+ // act
+ Author author = new ObjectMapper().readerFor(Author.class).readValue(json);
+
+ // assert
+ assertThat(from(json).getList("publications").size()).isEqualTo(author.getItems().size());
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/jsonfilter/JsonFilterTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/jsonfilter/JsonFilterTest.java
new file mode 100644
index 0000000000..cd18eed6fe
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/jsonfilter/JsonFilterTest.java
@@ -0,0 +1,42 @@
+package com.baeldung.jacksonannotation.general.jsonfilter;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ser.FilterProvider;
+import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
+import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
+import org.junit.Test;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonFilterTest {
+
+ @Test
+ public void whenSerializingUsingJsonFilter_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Author author = new Author("Alex", "Theedom");
+ FilterProvider filters = new SimpleFilterProvider()
+ .addFilter("authorFilter", SimpleBeanPropertyFilter.filterOutAllExcept("lastName"));
+
+ // act
+ String result = new ObjectMapper().writer(filters).writeValueAsString(author);
+
+ // assert
+ assertThat(from(result).getList("items")).isNull();
+
+ /*
+ {
+ "lastName": "Theedom"
+ }
+ */
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/jsonformat/JsonFormatTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/jsonformat/JsonFormatTest.java
new file mode 100644
index 0000000000..8f35cf0270
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/jsonformat/JsonFormatTest.java
@@ -0,0 +1,66 @@
+package com.baeldung.jacksonannotation.general.jsonformat;
+
+import com.baeldung.jacksonannotation.domain.Author;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonFormatTest {
+
+ @Test
+ public void whenSerializingUsingJsonFormat_thenCorrect() throws JsonProcessingException, ParseException {
+
+ // arrange
+ SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
+ df.setTimeZone(TimeZone.getTimeZone("UTC"));
+
+ String toParse = "20-12-2014 14:30:00";
+ Date date = df.parse(toParse);
+
+ Book book = new Book(
+ "Design Patterns: Elements of Reusable Object-oriented Software",
+ new Author("The", "GoF")
+ );
+ book.setPublished(date);
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(book);
+
+ // assert
+ assertThat(from(result).getString("published")).isEqualTo(toParse);
+
+ /*
+ {
+ "id": "762b39be-fd5b-489e-8688-aeb3b9bbf019",
+ "title": "Design Patterns: Elements of Reusable Object-oriented Software",
+ "authors": [
+ {
+ "id": "6941b780-0f54-4259-adcb-85523c8f25f4",
+ "firstName": "The",
+ "lastName": "GoF",
+ "items": []
+ }
+ ],
+ "price": 0,
+ "published": "20-12-2014 02:30:00",
+ "pages": null,
+ "isbn": null
+ }
+ */
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/jsonidentityinfo/JsonIdentityInfoTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/jsonidentityinfo/JsonIdentityInfoTest.java
new file mode 100644
index 0000000000..e3e53ebdbd
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/jsonidentityinfo/JsonIdentityInfoTest.java
@@ -0,0 +1,60 @@
+package com.baeldung.jacksonannotation.general.jsonidentityinfo;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import java.util.Collections;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonIdentityInfoTest {
+
+ @Test
+ public void whenSerializingUsingJsonIdentityInfo_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Author author = new Author("Alex", "Theedom");
+
+ Course course = new Course("Java EE Introduction", author);
+ author.setItems(Collections.singletonList(course));
+ course.setAuthors(Collections.singletonList(author));
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(author);
+
+ // assert
+ assertThat(from(result).getString("items[0].authors")).isNotNull();
+
+ /*
+ Authors are included.
+ {
+ "id": "1b408bf9-5946-4a14-a112-fde2953a7fe7",
+ "firstName": "Alex",
+ "lastName": "Theedom",
+ "items": [
+ {
+ "id": "5ed30530-f0a5-42eb-b786-be2c655da968",
+ "title": "Java EE Introduction",
+ "authors": [
+ "1b408bf9-5946-4a14-a112-fde2953a7fe7"
+ ],
+ "price": 0,
+ "duration": 0,
+ "medium": null,
+ "level": null,
+ "prerequisite": null
+ }
+ ]
+ }
+ */
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/jsonproperty/JsonPropertyTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/jsonproperty/JsonPropertyTest.java
new file mode 100644
index 0000000000..a05c3b2294
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/jsonproperty/JsonPropertyTest.java
@@ -0,0 +1,73 @@
+package com.baeldung.jacksonannotation.general.jsonproperty;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import java.io.IOException;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonPropertyTest {
+
+ @Test
+ public void whenSerializingUsingJsonProperty_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Book book = new Book(
+ "Design Patterns: Elements of Reusable Object-oriented Software",
+ new Author("The", "GoF")
+ );
+ book.configureBinding("Hardback");
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(book);
+
+ // assert
+ assertThat(from(result).getString("binding")).isEqualTo("Hardback");
+
+ /*
+ {
+ "id": "cd941587-d1ae-4c2a-9a36-29533bf50411",
+ "title": "Design Patterns: Elements of Reusable Object-oriented Software",
+ "authors": [
+ {
+ "id": "c8e26318-2f5b-4fa2-9fdc-6e99be021fca",
+ "firstName": "The",
+ "lastName": "GoF",
+ "items": []
+ }
+ ],
+ "price": 0,
+ "published": null,
+ "pages": null,
+ "isbn": null,
+ "binding": "Hardback"
+ }
+ */
+
+ }
+
+ @Test
+ public void whenDeserializingUsingJsonProperty_thenCorrect() throws IOException {
+
+ // arrange
+ String result = "{\"id\":\"cd941587-d1ae-4c2a-9a36-29533bf50411\",\"title\":\"Design Patterns: Elements of Reusable Object-oriented Software\",\"authors\":[{\"id\":\"c8e26318-2f5b-4fa2-9fdc-6e99be021fca\",\"firstName\":\"The\",\"lastName\":\"GoF\"}],\"binding\":\"Hardback\"}";
+
+ // act
+ Book book = new ObjectMapper().readerFor(Book.class).readValue(result);
+
+ // assert
+ assertThat(book.coverBinding()).isEqualTo("Hardback");
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/jsonunwrapped/JsonUnwrappedTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/jsonunwrapped/JsonUnwrappedTest.java
new file mode 100644
index 0000000000..6fff64c64e
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/jsonunwrapped/JsonUnwrappedTest.java
@@ -0,0 +1,44 @@
+package com.baeldung.jacksonannotation.general.jsonunwrapped;
+
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonUnwrappedTest {
+
+ @Test
+ public void whenSerializingUsingJsonUnwrapped_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Order.Type preorderType = new Order.Type();
+ preorderType.id = 10;
+ preorderType.name = "pre-order";
+
+ Order order = new Order(preorderType);
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(order);
+
+ // assert
+ assertThat(from(result).getInt("id")).isEqualTo(10);
+ assertThat(from(result).getString("name")).isEqualTo("pre-order");
+
+ /*
+ {
+ "id": 10,
+ "name": "pre-order"
+ }
+ */
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/jsonview/JsonViewTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/jsonview/JsonViewTest.java
new file mode 100644
index 0000000000..3e06b0f669
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/jsonview/JsonViewTest.java
@@ -0,0 +1,72 @@
+package com.baeldung.jacksonannotation.general.jsonview;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonViewTest {
+
+ @Test
+ public void whenSerializingUsingJsonView_andInternalView_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Order order = new Order(120);
+
+ // act
+ String result = new ObjectMapper().writerWithView(Views.Internal.class).writeValueAsString(order);
+
+ // assert
+ assertThat(from(result).getUUID("id")).isNotNull();
+ assertThat(from(result).getObject("type", Order.Type.class)).isNotNull();
+ assertThat(from(result).getInt("internalAudit")).isEqualTo(120);
+
+ /*
+ {
+ "id": "33806388-795b-4812-b90a-60292111bc5c",
+ "type": {
+ "id": 20,
+ "name": "Order"
+ },
+ "internalAudit": 120
+ }
+ */
+
+ }
+
+ @Test
+ public void whenSerializingUsingJsonView_andPublicView_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Order order = new Order(120);
+
+ // act
+ String result = new ObjectMapper().writerWithView(Views.Public.class).writeValueAsString(order);
+
+ // assert
+ assertThat(from(result).getUUID("id")).isNotNull();
+ assertThat(from(result).getObject("type", Order.Type.class)).isNotNull();
+ assertThat(result).doesNotContain("internalAudit");
+
+ /*
+ {
+ "id": "5184d5fc-e359-4cdf-93fa-4054025bef4e",
+ "type": {
+ "id": 20,
+ "name": "Order"
+ }
+ }
+ */
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/reference/ReferenceTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/reference/ReferenceTest.java
new file mode 100644
index 0000000000..34b223c98f
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/general/reference/ReferenceTest.java
@@ -0,0 +1,59 @@
+package com.baeldung.jacksonannotation.general.reference;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import java.util.Collections;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class ReferenceTest {
+
+ @Test
+ public void whenSerializingUsingReference_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Author author = new Author("Alex", "Theedom");
+
+ Course course = new Course("Java EE Introduction", author);
+ author.setItems(Collections.singletonList(course));
+ course.setAuthors(Collections.singletonList(author));
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(author);
+
+ // assert
+ assertThat(from(result).getString("items[0].authors")).isNull();
+
+ /*
+ Without references defined it throws StackOverflowError.
+ Authors excluded.
+
+ {
+ "id": "9c45d9b3-4888-4c24-8b74-65ef35627cd7",
+ "firstName": "Alex",
+ "lastName": "Theedom",
+ "items": [
+ {
+ "id": "f8309629-d178-4d67-93a4-b513ec4a7f47",
+ "title": "Java EE Introduction",
+ "price": 0,
+ "duration": 0,
+ "medium": null,
+ "level": null,
+ "prerequisite": null
+ }
+ ]
+ }
+ */
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/inclusion/jsonautodetect/JsonAutoDetectTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/inclusion/jsonautodetect/JsonAutoDetectTest.java
new file mode 100644
index 0000000000..87d3e7ddbf
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/inclusion/jsonautodetect/JsonAutoDetectTest.java
@@ -0,0 +1,52 @@
+package com.baeldung.jacksonannotation.inclusion.jsonautodetect;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonAutoDetectTest {
+
+ @Test
+ public void whenSerializingUsingJsonAutoDetect_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Order order = new Order(1234567890);
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(order);
+
+ // assert
+ assertThat(from(result).getInt("internalAudit")).isEqualTo(1234567890);
+
+ /*
+ With @JsonAutoDetect
+ {
+ "id": "c94774d9-de8f-4244-85d5-624bd3a4567a",
+ "type": {
+ "id": 20,
+ "name": "Order"
+ },
+ "internalAudit": 1234567890
+ }
+
+ Without @JsonAutoDetect
+ {
+ "id": "c94774d9-de8f-4244-85d5-624bd3a4567a",
+ "type": {
+ "id": 20,
+ "name": "Order"
+ }
+ }
+ */
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/inclusion/jsonignore/JsonIgnoreTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/inclusion/jsonignore/JsonIgnoreTest.java
new file mode 100644
index 0000000000..eeff2069b6
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/inclusion/jsonignore/JsonIgnoreTest.java
@@ -0,0 +1,41 @@
+package com.baeldung.jacksonannotation.inclusion.jsonignore;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonIgnoreTest {
+
+ @Test
+ public void whenSerializingUsingJsonIgnore_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Author author = new Author("Alex", "Theedom");
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(author);
+
+ // assert
+ assertThat(from(result).getString("firstName")).isEqualTo("Alex");
+ assertThat(from(result).getString("lastName")).isEqualTo("Theedom");
+ assertThat(from(result).getString("id")).isNull();
+
+ /*
+ {
+ "firstName": "Alex",
+ "lastName": "Theedom",
+ "items": []
+ }
+ */
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/inclusion/jsonignoreproperties/JsonIgnorePropertiesTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/inclusion/jsonignoreproperties/JsonIgnorePropertiesTest.java
new file mode 100644
index 0000000000..f0e6f1b684
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/inclusion/jsonignoreproperties/JsonIgnorePropertiesTest.java
@@ -0,0 +1,52 @@
+package com.baeldung.jacksonannotation.inclusion.jsonignoreproperties;
+
+import com.baeldung.jacksonannotation.domain.Author;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonIgnorePropertiesTest {
+
+ @Test
+ public void whenSerializingUsingJsonIgnoreProperties_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Course course = new Course("Spring Security", new Author("Eugen", "Paraschiv"));
+ course.setMedium(Course.Medium.ONLINE);
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(course);
+
+ // assert
+ assertThat(from(result).getString("medium")).isNull();
+
+ /*
+ {
+ "id": "ef0c8d2b-b088-409e-905c-95ac88dc0ed0",
+ "title": "Spring Security",
+ "authors": [
+ {
+ "id": "47a4f498-b0f3-4daf-909f-d2c35a0fe3c2",
+ "firstName": "Eugen",
+ "lastName": "Paraschiv",
+ "items": []
+ }
+ ],
+ "price": 0,
+ "duration": 0,
+ "level": null,
+ "prerequisite": null
+ }
+ */
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/inclusion/jsonignoretype/JsonIgnoreTypeTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/inclusion/jsonignoretype/JsonIgnoreTypeTest.java
new file mode 100644
index 0000000000..dbb12b46d5
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/inclusion/jsonignoretype/JsonIgnoreTypeTest.java
@@ -0,0 +1,40 @@
+package com.baeldung.jacksonannotation.inclusion.jsonignoretype;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonIgnoreTypeTest {
+
+ @Test
+ public void whenSerializingUsingJsonIgnoreType_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Order.Type type = new Order.Type();
+ type.id = 10;
+ type.name = "Pre-order";
+
+ Order order = new Order(type);
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(order);
+
+ // assert
+ assertThat(from(result).getString("id")).isNotNull();
+ assertThat(from(result).getString("type")).isNull();
+
+ /*
+ {"id":"ac2428da-523e-443c-a18a-4ea4d2791fea"}
+ */
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/inclusion/jsoninclude/JsonIncludeTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/inclusion/jsoninclude/JsonIncludeTest.java
new file mode 100644
index 0000000000..7d24d006e8
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/inclusion/jsoninclude/JsonIncludeTest.java
@@ -0,0 +1,41 @@
+package com.baeldung.jacksonannotation.inclusion.jsoninclude;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonIncludeTest {
+
+ @Test
+ public void whenSerializingUsingJsonInclude_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Author author = new Author("Alex", null);
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(author);
+
+ // assert
+ assertThat(from(result).getString("firstName")).isEqualTo("Alex");
+ assertThat(result).doesNotContain("lastName");
+
+
+ /*
+ {
+ "id": "e8bb4802-6e0c-4fa5-9f68-c233272399cd",
+ "firstName": "Alex",
+ "items": []
+ }
+ */
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/miscellaneous/custom/CustomTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/miscellaneous/custom/CustomTest.java
new file mode 100644
index 0000000000..aa885d6804
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/miscellaneous/custom/CustomTest.java
@@ -0,0 +1,51 @@
+package com.baeldung.jacksonannotation.miscellaneous.custom;
+
+import com.baeldung.jacksonannotation.domain.Author;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class CustomTest {
+
+ @Test
+ public void whenSerializingUsingCustom_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Course course = new Course("Spring Security", new Author("Eugen", "Paraschiv"));
+ course.setMedium(Course.Medium.ONLINE);
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(course);
+
+ // assert
+ assertThat(from(result).getString("title")).isEqualTo("Spring Security");
+
+ /*
+ {
+ "title": "Spring Security",
+ "price": 0,
+ "id": "7dfd4db9-1175-432f-a53b-687423f7bb9b",
+ "duration": 0,
+ "authors": [
+ {
+ "id": "da0738f6-033c-4974-8d87-92820e5ccf27",
+ "firstName": "Eugen",
+ "lastName": "Paraschiv",
+ "items": []
+ }
+ ],
+ "medium": "ONLINE"
+ }
+ */
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/miscellaneous/disable/DisableTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/miscellaneous/disable/DisableTest.java
new file mode 100644
index 0000000000..b66adea8c8
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/miscellaneous/disable/DisableTest.java
@@ -0,0 +1,58 @@
+package com.baeldung.jacksonannotation.miscellaneous.disable;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.MapperFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class DisableTest {
+
+ @Test
+ public void whenSerializingUsingDisable_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Author author = new Author("Alex", "Theedom");
+
+ // act
+ ObjectMapper mapper = new ObjectMapper();
+ String result = mapper.writeValueAsString(author);
+
+ // assert
+ assertThat(from(result).getList("items")).isNull();
+
+ /*
+ {
+ "lastName": "Theedom",
+ "firstName": "Alex",
+ "id": "de4afbb4-b24d-45c8-bb00-fd6b9acb42f1"
+ }
+ */
+
+ // act
+ mapper = new ObjectMapper();
+ mapper.disable(MapperFeature.USE_ANNOTATIONS);
+ result = mapper.writeValueAsString(author);
+
+ // assert
+ assertThat(from(result).getList("items")).isNotNull();
+
+ /*
+ {
+ "id": "81e6ed72-6b27-4fe9-a36f-e3171c5b55ef",
+ "firstName": "Alex",
+ "lastName": "Theedom",
+ "items": []
+ }
+ */
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/miscellaneous/mixin/MixInTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/miscellaneous/mixin/MixInTest.java
new file mode 100644
index 0000000000..7c021e5a4f
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/miscellaneous/mixin/MixInTest.java
@@ -0,0 +1,58 @@
+package com.baeldung.jacksonannotation.miscellaneous.mixin;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import java.util.List;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class MixInTest {
+
+ @Test
+ public void whenSerializingUsingMixIn_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Author author = new Author("Alex", "Theedom");
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(author);
+
+ // assert
+ assertThat(from(result).getList("items")).isNotNull();
+
+ /*
+ {
+ "id": "f848b076-00a4-444a-a50b-328595dd9bf5",
+ "firstName": "Alex",
+ "lastName": "Theedom",
+ "items": []
+ }
+ */
+
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.addMixIn(List.class, IgnoreListMixIn.class);
+
+ result = mapper.writeValueAsString(author);
+
+ // assert
+ assertThat(from(result).getList("items")).isNull();
+
+ /*
+ {
+ "id": "9ffefb7d-e56f-447c-9009-e92e142f8347",
+ "firstName": "Alex",
+ "lastName": "Theedom"
+ }
+ */
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/polymorphism/PolymorphismTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/polymorphism/PolymorphismTest.java
new file mode 100644
index 0000000000..702c39eb11
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/polymorphism/PolymorphismTest.java
@@ -0,0 +1,64 @@
+package com.baeldung.jacksonannotation.polymorphism;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import java.io.IOException;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class PolymorphismTest {
+
+ @Test
+ public void whenSerializingUsingPolymorphism_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Order.InternalType internalType = new Order.InternalType();
+ internalType.id = 250;
+ internalType.name = "staff";
+
+ Order order = new Order(internalType);
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(order);
+
+ // assert
+ assertThat(from(result).getString("type.ordertype")).isEqualTo("internal");
+
+ /*
+ {
+ "id": "7fc898e3-b4e7-41b0-8ffa-664cf3663f2e",
+ "type": {
+ "ordertype": "internal",
+ "id": 250,
+ "name": "staff"
+ }
+ }
+ */
+
+ }
+
+ @Test
+ public void whenDeserializingPolymorphic_thenCorrect() throws IOException {
+
+ // arrange
+ String orderJson = "{\"type\":{\"ordertype\":\"internal\",\"id\":100,\"name\":\"directors\"}}";
+
+ // act
+ Order order = new ObjectMapper().readerFor(Order.class).readValue(orderJson);
+
+ // assert
+ assertThat(from(orderJson).getString("type.ordertype")).isEqualTo("internal");
+ assertThat(((Order.InternalType) order.getType()).name).isEqualTo("directors");
+ assertThat(((Order.InternalType) order.getType()).id).isEqualTo(100);
+ assertThat(order.getType().getClass()).isEqualTo(Order.InternalType.class);
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsonanygetter/JsonAnyGetterTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsonanygetter/JsonAnyGetterTest.java
new file mode 100644
index 0000000000..efbc271b2a
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsonanygetter/JsonAnyGetterTest.java
@@ -0,0 +1,49 @@
+package com.baeldung.jacksonannotation.serialization.jsonanygetter;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import java.util.Map;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonAnyGetterTest {
+
+ @Test
+ public void whenSerializingUsingJsonAnyGetter_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Inventory inventory = new Inventory();
+ Map countryDeliveryCost = inventory.getCountryDeliveryCost();
+ inventory.setLocation("France");
+
+ countryDeliveryCost.put("USA", 10.00f);
+ countryDeliveryCost.put("UK", 15.00f);
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(inventory);
+
+ // assert
+ assertThat(from(result).getString("location")).isEqualTo("France");
+ assertThat(from(result).getFloat("USA")).isEqualTo(10.00f);
+ assertThat(from(result).getFloat("UK")).isEqualTo(15.00f);
+
+ /*
+ {
+ "location": "France",
+ "USA": 10,
+ "UK": 15
+ }
+ */
+
+ }
+
+}
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsongetter/JsonGetterTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsongetter/JsonGetterTest.java
new file mode 100644
index 0000000000..2aa97e0baf
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsongetter/JsonGetterTest.java
@@ -0,0 +1,40 @@
+package com.baeldung.jacksonannotation.serialization.jsongetter;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonGetterTest {
+
+ @Test
+ public void whenSerializingUsingJsonGetter_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Author author = new Author("Alex", "Theedom");
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(author);
+
+ // assert
+ assertThat(from(result).getList("publications")).isNotNull();
+ assertThat(from(result).getList("items")).isNull();
+
+ /*
+ {
+ "firstName": "Alex",
+ "lastName": "Theedom",
+ "publications": []
+ }
+ */
+
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsonpropertyorder/JsonPropertyOrderTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsonpropertyorder/JsonPropertyOrderTest.java
new file mode 100644
index 0000000000..cfd0f5a28b
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsonpropertyorder/JsonPropertyOrderTest.java
@@ -0,0 +1,46 @@
+package com.baeldung.jacksonannotation.serialization.jsonpropertyorder;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import static io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonPropertyOrderTest {
+
+ @Test
+ public void whenSerializingUsingJsonPropertyOrder_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Author author = new Author("Alex", "Theedom");
+ author.setzIndex("z123");
+ author.setAlphaIndex("z123");
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(author);
+
+ // assert
+ assertThat(result, matchesJsonSchemaInClasspath("author-jsonpropertyorder-schema.json"));
+
+ // NOTE: property order is not enforced by the JSON specification.
+
+ /*
+ {
+ "items": [],
+ "firstName": "Alex",
+ "lastName": "Theedom",
+ "id": "31ca2af9-df0a-4d49-a74c-86c0a3f944a2",
+ "alphaIndex": "z123",
+ "zIndex": "z123"
+ }
+ */
+
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsonrawvalue/JsonRawValueTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsonrawvalue/JsonRawValueTest.java
new file mode 100644
index 0000000000..9d15be149a
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsonrawvalue/JsonRawValueTest.java
@@ -0,0 +1,46 @@
+package com.baeldung.jacksonannotation.serialization.jsonrawvalue;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonRawValueTest {
+
+ @Test
+ public void whenSerializingUsingJsonRawValue_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ String customerConfig = "{\"colour\":\"red\",\"device\":\"mobile\",\"orientation\":\"landscape\"}";
+ Customer customer = new Customer("Alex", "Theedom");
+ customer.setConfiguration("{\"colour\":\"red\",\"device\":\"mobile\",\"orientation\":\"landscape\"}");
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(customer);
+
+ // assert
+ assertThat(result.contains(customerConfig));
+
+
+ /*
+ {
+ "id": "7674fbec-527f-4008-a619-f9967cd0cbe0",
+ "firstName": "Alex",
+ "lastName": "Theedom",
+ "configuration": {
+ "colour": "red",
+ "device": "mobile",
+ "orientation": "landscape"
+ }
+ }
+ */
+
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsonrootname/JsonRootNameTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsonrootname/JsonRootNameTest.java
new file mode 100644
index 0000000000..6d63d28eaf
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsonrootname/JsonRootNameTest.java
@@ -0,0 +1,46 @@
+package com.baeldung.jacksonannotation.serialization.jsonrootname;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import org.junit.Test;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonRootNameTest {
+
+ @Test
+ public void whenSerializingUsingJsonRootName_thenCorrect() throws JsonProcessingException {
+
+ // arrange
+ Author author = new Author("Alex", "Theedom");
+
+ // act
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
+ String result = mapper.writeValueAsString(author);
+
+ // assert
+ assertThat(from(result).getString("writer.firstName")).isEqualTo("Alex");
+ assertThat(from(result).getString("author.firstName")).isNull();
+
+ /*
+ {
+ "writer": {
+ "id": "0f50dca6-3dd7-4801-a334-fd1614276389",
+ "firstName": "Alex",
+ "lastName": "Theedom",
+ "items": []
+ }
+ }
+ */
+
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsonserialize/JsonSerializeTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsonserialize/JsonSerializeTest.java
new file mode 100644
index 0000000000..4b15f1f459
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsonserialize/JsonSerializeTest.java
@@ -0,0 +1,58 @@
+package com.baeldung.jacksonannotation.serialization.jsonserialize;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import static io.restassured.path.json.JsonPath.from;
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonSerializeTest {
+
+ @Test
+ public void whenSerializingUsingJsonSerialize_thenCorrect() throws JsonProcessingException, ParseException {
+
+ // arrange
+ Author joshuaBloch = new Author("Joshua", "Bloch");
+ Book book = new Book("Effective Java", joshuaBloch);
+
+ SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
+ String toParse = "25-12-2017 13:30:25";
+ book.setPublished(df.parse(toParse));
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(book);
+
+ // assert
+ assertThat(from(result).getString("published")).isEqualTo(toParse);
+
+ /*
+ {
+ "id": "957c43f2-fa2e-42f9-bf75-6e3d5bb6960a",
+ "title": "Effective Java",
+ "authors": [
+ {
+ "id": "9bcd817d-0141-42e6-8f04-e5aaab0980b6",
+ "firstName": "Joshua",
+ "lastName": "Bloch",
+ "items": []
+ }
+ ],
+ "price": 0,
+ "published": "25-12-2017 13:30:25",
+ "pages": null,
+ "isbn": null
+ }
+ */
+
+ }
+}
diff --git a/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsonvalue/JsonValueTest.java b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsonvalue/JsonValueTest.java
new file mode 100644
index 0000000000..91541f60f2
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/java/com/baeldung/jacksonannotation/serialization/jsonvalue/JsonValueTest.java
@@ -0,0 +1,54 @@
+package com.baeldung.jacksonannotation.serialization.jsonvalue;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Source code github.com/eugenp/tutorials
+ *
+ * @author Alex Theedom www.baeldung.com
+ * @version 1.0
+ */
+public class JsonValueTest {
+
+ @Test
+ public void whenSerializingUsingJsonValue_thenCorrect() throws JsonProcessingException {
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(Course.Level.ADVANCED);
+
+ // assert
+ assertThat(result).isEqualTo("\"Advanced\"");
+
+ /*
+
+ "Advanced"
+
+ */
+
+ }
+
+ @Test
+ public void whenSerializingAuthorUsingJsonValue_thenFirstNameAndLastNameAreConcatenated() throws JsonProcessingException {
+
+ // arrange
+ Author me = new Author("Alex", "Theedom");
+
+ // act
+ String result = new ObjectMapper().writeValueAsString(me);
+
+ // assert
+ assertThat(result).contains("Alex Theedom");
+
+ /*
+ {
+ "name": "Alex Theedom"
+ }
+
+ */
+
+ }
+}
\ No newline at end of file
diff --git a/video-tutorials/jackson-annotations/src/test/resources/author-jsonpropertyorder-schema.json b/video-tutorials/jackson-annotations/src/test/resources/author-jsonpropertyorder-schema.json
new file mode 100644
index 0000000000..14d596e47f
--- /dev/null
+++ b/video-tutorials/jackson-annotations/src/test/resources/author-jsonpropertyorder-schema.json
@@ -0,0 +1,37 @@
+{
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "title": "Author",
+ "description": "An author",
+ "type": "object",
+ "properties": {
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ },
+ "firstName": {
+ "type": "string"
+ },
+ "lastName": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "zIndex": {
+ "type": "string"
+ },
+ "alphaIndex": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "items",
+ "firstName",
+ "lastName",
+ "id",
+ "alphaIndex",
+ "zIndex"
+ ]
+}
\ No newline at end of file
diff --git a/video-tutorials/pom.xml b/video-tutorials/pom.xml
new file mode 100644
index 0000000000..0ddbad2407
--- /dev/null
+++ b/video-tutorials/pom.xml
@@ -0,0 +1,16 @@
+
+ 4.0.0
+ com.baeldung
+ video-tutorials
+ 1.0.0-SNAPSHOT
+
+ pom
+ video-tutorials
+
+ jackson-annotations
+
+
+
+
+