Add Spring MVC form and binding example

This commit is contained in:
Alex Theedom 2016-12-06 13:30:04 +00:00
parent 6cca052251
commit 99ad241f9d
88 changed files with 4219 additions and 0 deletions

249
jackson-annotations/pom.xml Normal file
View File

@ -0,0 +1,249 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung</groupId>
<artifactId>jackson-annotations</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>jackson-annotations</name>
<url>http://www.baeldung.com</url>
<dependencies>
<!-- utils -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<!--jackson for xml-->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>${commons-collections4.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<!-- web -->
<!-- marshalling -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jsonSchema</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${joda-time.version}</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${gson.version}</version>
</dependency>
<!-- test scoped -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>3.0.1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/io.rest-assured/json-schema-validator -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>3.0.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.github.fge</groupId>
<artifactId>json-schema-validator</artifactId>
<version>2.2.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.6.1</version>
<scope>test</scope>
</dependency>
<!-- logging -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
<!-- <scope>runtime</scope> -->
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j.version}</version>
<!-- <scope>runtime</scope> --> <!-- some spring dependencies need to compile against jcl -->
</dependency>
<dependency> <!-- needed to bridge to slf4j for projects that use the log4j APIs directly -->
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>${org.slf4j.version}</version>
</dependency>
</dependencies>
<build>
<finalName>jackson</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>${maven-compiler-plugin.source}</source>
<target>${maven-compiler-plugin.source}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
</plugin>
</plugins>
</build>
<properties>
<!-- persistence -->
<hibernate.version>4.3.11.Final</hibernate.version>
<mysql-connector-java.version>5.1.38</mysql-connector-java.version>
<!-- marshalling -->
<jackson.version>2.8.5</jackson.version>
<!-- logging -->
<org.slf4j.version>1.7.21</org.slf4j.version>
<logback.version>1.1.7</logback.version>
<!-- various -->
<hibernate-validator.version>5.1.3.Final</hibernate-validator.version>
<joda-time.version>2.9.6</joda-time.version>
<gson.version>2.8.0</gson.version>
<commons-collections4.version>4.1</commons-collections4.version>
<!-- util -->
<guava.version>20.0</guava.version>
<commons-lang3.version>3.5</commons-lang3.version>
<commons-io.version>2.5</commons-io.version>
<!-- testing -->
<org.hamcrest.version>1.3</org.hamcrest.version>
<junit.version>4.12</junit.version>
<mockito.version>2.2.26</mockito.version>
<httpcore.version>4.4.1</httpcore.version>
<httpclient.version>4.5</httpclient.version>
<rest-assured.version>2.9.0</rest-assured.version>
<!-- maven plugins -->
<maven-compiler-plugin.version>3.5.1</maven-compiler-plugin.version>
<maven-war-plugin.version>2.6</maven-war-plugin.version>
<maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
<maven-resources-plugin.version>2.7</maven-resources-plugin.version>
<cargo-maven2-plugin.version>1.4.18</cargo-maven2-plugin.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven-compiler-plugin.source>1.8</maven-compiler-plugin.source>
</properties>
</project>

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Author extends Person {
List<Item> items = new ArrayList<>();
public Author(){
super();
}
public Author(String firstName, String lastName) {
super(firstName, lastName);
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}

View File

@ -0,0 +1,49 @@
package com.baeldung.jacksonannotation.deserialization.jacksoninject;
import com.fasterxml.jackson.annotation.JacksonInject;
import java.util.UUID;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
* @see JsonAnyGetter
*/
public class Inventory {
private Map<Author, Item> stock = new HashMap<>();
private Map<String, Float> countryDeliveryCost = new HashMap<>();
@JsonIgnore
public Map<Author, Item> getStock() {
return stock;
}
public Map<String, Float> getCountryDeliveryCost() {
return countryDeliveryCost;
}
@JsonAnySetter
public void addCountryDeliveryCost(String country, Float cost) {
countryDeliveryCost.put(country, cost);
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
* @see JsonGetter
*/
public class Author extends Person {
List<Item> items = new ArrayList<>();
@JsonCreator
public Author(
@JsonProperty("christianName") String firstName,
@JsonProperty("surname") String lastName) {
super(firstName, lastName);
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Author extends Person {
List<Item> items = new ArrayList<>();
public Author(String firstName, String lastName) {
super(firstName, lastName);
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class CustomDateDeserializer extends StdDeserializer<Date> {
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);
}
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Item {
private UUID id;
private String title;
private List<Person> 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<Person> getAuthors() {
return authors;
}
public void setAuthors(List<Person> authors) {
this.authors = authors;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Author extends Person {
private List<Item> items = new ArrayList<>();
public Author(){
super();
}
public Author(String firstName, String lastName) {
super(firstName, lastName);
}
@JsonIgnore
public List<Item> getItems() {
return items;
}
@JsonSetter("publications")
public void setItems(List<Item> items) {
this.items = items;
}
}

View File

@ -0,0 +1,27 @@
package com.baeldung.jacksonannotation.domain;
import java.util.ArrayList;
import java.util.List;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Author extends Person {
private List<Item> items = new ArrayList<>();
public Author(String firstName, String lastName) {
super(firstName, lastName);
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}

View File

@ -0,0 +1,48 @@
package com.baeldung.jacksonannotation.domain;
import java.math.BigDecimal;
import java.util.Date;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -0,0 +1,71 @@
package com.baeldung.jacksonannotation.domain;
import java.util.List;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.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<Course> 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<Course> getPrerequisite() {
return prerequisite;
}
public void setPrerequisite(List<Course> prerequisite) {
this.prerequisite = prerequisite;
}
}

View File

@ -0,0 +1,24 @@
package com.baeldung.jacksonannotation.domain;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -0,0 +1,29 @@
package com.baeldung.jacksonannotation.domain;
import java.util.HashMap;
import java.util.Map;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Inventory {
private Map<Author, Item> stock;
private Map<String, Float> countryDeliveryCost = new HashMap<>();
public Map<Author, Item> getStock() {
return stock;
}
public void setStock(Map<Author, Item> stock) {
this.stock = stock;
}
public Map<String, Float> getCountryDeliveryCost() {
return countryDeliveryCost;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Item {
private UUID id;
private String title;
private List<Person> 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<Person> getAuthors() {
return authors;
}
public void setAuthors(List<Person> authors) {
this.authors = authors;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}

View File

@ -0,0 +1,50 @@
package com.baeldung.jacksonannotation.domain;
import java.util.UUID;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -0,0 +1,44 @@
package com.baeldung.jacksonannotation.domain;
import java.util.UUID;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
@JsonFilter("authorFilter")
public class Author extends Person {
private List<Item> items = new ArrayList<>();
public Author(String firstName, String lastName) {
super(firstName, lastName);
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
public class Author extends Person {
private List<Item> items = new ArrayList<>();
public Author(String firstName, String lastName) {
super(firstName, lastName);
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}

View File

@ -0,0 +1,72 @@
package com.baeldung.jacksonannotation.general.jsonidentityinfo;
import java.util.List;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.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<Course> 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<Course> getPrerequisite() {
return prerequisite;
}
public void setPrerequisite(List<Course> prerequisite) {
this.prerequisite = prerequisite;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
public class Item {
private UUID id;
private String title;
private List<Person> 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<Person> getAuthors() {
return authors;
}
public void setAuthors(List<Person> authors) {
this.authors = authors;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}

View File

@ -0,0 +1,44 @@
package com.baeldung.jacksonannotation.general.jsonidentityinfo;
import java.util.UUID;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Author extends Person {
private List<Item> items = new ArrayList<>();
public Author(String firstName, String lastName) {
super(firstName, lastName);
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Item {
private UUID id;
private String title;
private List<Person> 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<Person> getAuthors() {
return authors;
}
public void setAuthors(List<Person> authors) {
this.authors = authors;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}

View File

@ -0,0 +1,54 @@
package com.baeldung.jacksonannotation.general.jsonunwrapped;
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import java.util.UUID;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -0,0 +1,57 @@
package com.baeldung.jacksonannotation.general.jsonview;
import com.fasterxml.jackson.annotation.JsonView;
import java.util.UUID;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -0,0 +1,15 @@
package com.baeldung.jacksonannotation.general.jsonview;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Views {
public static class Public {
}
public static class Internal extends Public {
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Author extends Person {
private List<Item> items = new ArrayList<>();
public Author(String firstName, String lastName) {
super(firstName, lastName);
}
@JsonManagedReference
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}

View File

@ -0,0 +1,72 @@
package com.baeldung.jacksonannotation.general.reference;
import java.util.List;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.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<Course> 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<Course> getPrerequisite() {
return prerequisite;
}
public void setPrerequisite(List<Course> prerequisite) {
this.prerequisite = prerequisite;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Item {
private UUID id;
private String title;
@JsonBackReference
private List<Person> 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<Person> getAuthors() {
return authors;
}
public void setAuthors(List<Person> authors) {
this.authors = authors;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}

View File

@ -0,0 +1,44 @@
package com.baeldung.jacksonannotation.general.reference;
import java.util.UUID;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Author extends Person {
private List<Item> items = new ArrayList<>();
public Author(String firstName, String lastName) {
super(firstName, lastName);
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}

View File

@ -0,0 +1,47 @@
package com.baeldung.jacksonannotation.inclusion.jsonignore;
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.util.UUID;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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<Course> 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<Course> getPrerequisite() {
return prerequisite;
}
public void setPrerequisite(List<Course> prerequisite) {
this.prerequisite = prerequisite;
}
}

View File

@ -0,0 +1,44 @@
package com.baeldung.jacksonannotation.inclusion.jsonignoretype;
import com.fasterxml.jackson.annotation.JsonIgnoreType;
import java.util.UUID;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
@JsonInclude(NON_NULL)
public class Author extends Person {
private List<Item> items = new ArrayList<>();
public Author(String firstName, String lastName) {
super(firstName, lastName);
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}

View File

@ -0,0 +1,74 @@
package com.baeldung.jacksonannotation.miscellaneous.custom;
import com.baeldung.jacksonannotation.domain.Author;
import java.util.List;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.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<Course> 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<Course> getPrerequisite() {
return prerequisite;
}
public void setPrerequisite(List<Course> prerequisite) {
this.prerequisite = prerequisite;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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 {
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Item {
private UUID id;
private String title;
private List<Person> 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<Person> getAuthors() {
return authors;
}
public void setAuthors(List<Person> authors) {
this.authors = authors;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"lastName", "items", "firstName", "id"})
public class Author extends Person {
@JsonIgnore
private List<Item> items = new ArrayList<>();
public Author(String firstName, String lastName) {
super(firstName, lastName);
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Author extends Person {
private List<Item> items = new ArrayList<>();
public Author(String firstName, String lastName) {
super(firstName, lastName);
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}

View File

@ -0,0 +1,13 @@
package com.baeldung.jacksonannotation.miscellaneous.mixin;
import com.fasterxml.jackson.annotation.JsonIgnoreType;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
@JsonIgnoreType
public class IgnoreListMixIn {
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Inventory {
private String location;
private Map<Author, Item> stock = new HashMap<>();
private Map<String, Float> countryDeliveryCost = new HashMap<>();
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
@JsonIgnore
public Map<Author, Item> getStock() {
return stock;
}
@JsonAnyGetter
public Map<String, Float> getCountryDeliveryCost() {
return countryDeliveryCost;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Author extends Person {
List<Item> items = new ArrayList<>();
public Author(String firstName, String lastName) {
super(firstName, lastName);
}
@JsonGetter("publications")
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}

View File

@ -0,0 +1,32 @@
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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
@JsonPropertyOrder({"items", "firstName", "lastName", "id"})
public class Author extends Person {
List<Item> items = new ArrayList<>();
public Author(String firstName, String lastName) {
super(firstName, lastName);
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}

View File

@ -0,0 +1,42 @@
package com.baeldung.jacksonannotation.serialization.jsonpropertyorder;
import java.util.UUID;
/**
* Source code github.com/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
@JsonRootName("writer")
public class Author extends Person {
List<Item> items = new ArrayList<>();
public Author(String firstName, String lastName) {
super(firstName, lastName);
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Author extends Person {
List<Item> items = new ArrayList<>();
public Author(String firstName, String lastName) {
super(firstName, lastName);
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class CustomDateSerializer extends StdSerializer<Date> {
private static SimpleDateFormat formatter =
new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
public CustomDateSerializer() {
this(null);
}
public CustomDateSerializer(Class<Date> t) {
super(t);
}
@Override
public void serialize(Date value, JsonGenerator gen, SerializerProvider arg2)
throws IOException, JsonProcessingException {
gen.writeString(formatter.format(value));
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class Item {
private UUID id;
private String title;
private List<Person> 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<Person> getAuthors() {
return authors;
}
public void setAuthors(List<Person> authors) {
this.authors = authors;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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<Course> 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<Course> getPrerequisite() {
return prerequisite;
}
public void setPrerequisite(List<Course> prerequisite) {
this.prerequisite = prerequisite;
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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": []
}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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"));
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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"
}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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()));
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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());
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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"
}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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
}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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
}
]
}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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");
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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"
}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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"
}
}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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
}
]
}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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"
}
}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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": []
}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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
}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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"}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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": []
}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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"
}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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": []
}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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"
}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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);
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class JsonAnyGetterTest {
@Test
public void whenSerializingUsingJsonAnyGetter_thenCorrect() throws JsonProcessingException {
// arrange
Inventory inventory = new Inventory();
Map<String, Float> 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
}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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": []
}
*/
}
}

View File

@ -0,0 +1,42 @@
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/readlearncode
*
* @author Alex Theedom www.readlearncode.com
* @version 1.0
*/
public class JsonPropertyOrderTest {
@Test
public void whenSerializingUsingJsonPropertyOrder_thenCorrect() throws JsonProcessingException {
// arrange
Author author = new Author("Alex", "Theedom");
// 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": "fd277638-9b6e-49f7-81c1-bc52f165245b"
}
*/
}
}

View File

@ -0,0 +1,41 @@
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/readlearncode
*
* @author Alex Theedom www.readlearncode.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));
/*
{
"firstName": "Alex",
"lastName": "Theedom",
"publications": []
}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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": []
}
}
*/
}
}

View File

@ -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/readlearncode
*
* @author Alex Theedom www.readlearncode.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
}
*/
}
}

View File

@ -0,0 +1,27 @@
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/readlearncode
*
* @author Alex Theedom www.readlearncode.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\"");
}
}

View File

@ -0,0 +1,29 @@
{
"$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"
}
},
"required": [
"items",
"firstName",
"lastName",
"id"
]
}

View File

@ -47,6 +47,7 @@
<module>immutables</module>
<module>jackson</module>
<module>jackson-annotations</module>
<module>java-cassandra</module>
<module>javaxval</module>
<module>jee7</module>