Code for Jackson post (#197)
* add the initial maven project * add a few code examples * add a few code examples * add a few code examples * add a few code examples * add a few code examples * add JsonAnyGetter example
This commit is contained in:
committed by
GitHub
parent
937fee0773
commit
3d2be288e5
29
core-java/jackson/jackson/.gitignore
vendored
Normal file
29
core-java/jackson/jackson/.gitignore
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
HELP.md
|
||||
target/*
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
!**/src/main/**/target/
|
||||
!**/src/test/**/target/
|
||||
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
build/
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
52
core-java/jackson/jackson/pom.xml
Normal file
52
core-java/jackson/jackson/pom.xml
Normal file
@@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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.reflectoring</groupId>
|
||||
<artifactId>jackson</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>11</maven.compiler.source>
|
||||
<maven.compiler.target>11</maven.compiler.target>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
<version>2.13.3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.datatype</groupId>
|
||||
<artifactId>jackson-datatype-jsr310</artifactId>
|
||||
<version>2.13.3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-api</artifactId>
|
||||
<version>5.9.0-M1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.24</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.assertj</groupId>
|
||||
<artifactId>assertj-core</artifactId>
|
||||
<version>3.23.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
</dependencies>
|
||||
</project>
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.reflectoring.pojo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonAnySetter;
|
||||
import com.fasterxml.jackson.annotation.JsonSetter;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public class Car {
|
||||
@JsonSetter("carBrand")
|
||||
private String brand;
|
||||
private Map<String, String> unrecognizedFields = new HashMap<>();
|
||||
|
||||
@JsonAnySetter
|
||||
public void allSetter(String fieldName, String fieldValue) {
|
||||
unrecognizedFields.put(fieldName, fieldValue);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.reflectoring.pojo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonAnyGetter;
|
||||
import com.fasterxml.jackson.annotation.JsonGetter;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class Cat {
|
||||
private String name;
|
||||
|
||||
@JsonAnyGetter
|
||||
Map<String, String> map = Map.of(
|
||||
"name", "Jack",
|
||||
"surname", "wolfskin"
|
||||
);
|
||||
|
||||
@JsonGetter("catName")
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public Cat(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.reflectoring.pojo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Getter
|
||||
public class Dog {
|
||||
private String name;
|
||||
@JsonIgnore
|
||||
private Integer age;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.reflectoring.pojo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class Employee {
|
||||
private String firstName;
|
||||
private String lastName;
|
||||
private int age;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.reflectoring.pojo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonSetter;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public class Order {
|
||||
private int id;
|
||||
@JsonFormat(pattern = "dd/MM/yyyy")
|
||||
private LocalDate date;
|
||||
}
|
||||
@@ -0,0 +1,184 @@
|
||||
package com.reflectoring;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.reflectoring.pojo.*;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class JacksonTest {
|
||||
ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules();
|
||||
|
||||
@Test
|
||||
void jsonStringToPojo() throws JsonProcessingException {
|
||||
String employeeJson = "{\n" +
|
||||
" \"firstName\" : \"Jalil\",\n" +
|
||||
" \"lastName\" : \"Jarjanazy\",\n" +
|
||||
" \"age\" : 30\n" +
|
||||
"}";
|
||||
|
||||
Employee employee = objectMapper.readValue(employeeJson, Employee.class);
|
||||
|
||||
assertThat(employee.getFirstName()).isEqualTo("Jalil");
|
||||
}
|
||||
|
||||
@Test
|
||||
void pojoToJsonString() throws JsonProcessingException {
|
||||
Employee employee = new Employee("Mark", "James", 20);
|
||||
|
||||
String json = objectMapper.writeValueAsString(employee);
|
||||
|
||||
assertThat(json).isEqualTo("{\"firstName\":\"Mark\",\"lastName\":\"James\",\"age\":20}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void jsonFileToPojo() throws IOException {
|
||||
File file = new File("src/test/resources/employee.json");
|
||||
|
||||
Employee employee = objectMapper.readValue(file, Employee.class);
|
||||
|
||||
assertThat(employee.getAge()).isEqualTo(44);
|
||||
assertThat(employee.getLastName()).isEqualTo("Simpson");
|
||||
assertThat(employee.getFirstName()).isEqualTo("Homer");
|
||||
}
|
||||
|
||||
@Test
|
||||
void byteArrayToPojo() throws IOException {
|
||||
String employeeJson = "{\n" +
|
||||
" \"firstName\" : \"Jalil\",\n" +
|
||||
" \"lastName\" : \"Jarjanazy\",\n" +
|
||||
" \"age\" : 30\n" +
|
||||
"}";
|
||||
|
||||
Employee employee = objectMapper.readValue(employeeJson.getBytes(), Employee.class);
|
||||
|
||||
assertThat(employee.getFirstName()).isEqualTo("Jalil");
|
||||
}
|
||||
|
||||
@Test
|
||||
void fileToListOfPojos() throws IOException {
|
||||
File file = new File("src/test/resources/employeeList.json");
|
||||
List<Employee> employeeList = objectMapper.readValue(file, new TypeReference<>(){});
|
||||
|
||||
assertThat(employeeList).hasSize(2);
|
||||
assertThat(employeeList.get(0).getAge()).isEqualTo(33);
|
||||
assertThat(employeeList.get(0).getLastName()).isEqualTo("Simpson");
|
||||
assertThat(employeeList.get(0).getFirstName()).isEqualTo("Marge");
|
||||
}
|
||||
|
||||
@Test
|
||||
void fileToMap() throws IOException {
|
||||
File file = new File("src/test/resources/employee.json");
|
||||
Map<String, Object> employee = objectMapper.readValue(file, new TypeReference<>(){});
|
||||
|
||||
assertThat(employee.keySet()).containsExactly("firstName", "lastName", "age");
|
||||
|
||||
assertThat(employee.get("firstName")).isEqualTo("Homer");
|
||||
assertThat(employee.get("lastName")).isEqualTo("Simpson");
|
||||
assertThat(employee.get("age")).isEqualTo(44);
|
||||
}
|
||||
|
||||
@Test
|
||||
void fileToPojoWithUnknownProperties() throws IOException {
|
||||
File file = new File("src/test/resources/employeeWithUnknownProperties.json");
|
||||
|
||||
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||
|
||||
Employee employee = objectMapper.readValue(file, Employee.class);
|
||||
|
||||
assertThat(employee.getFirstName()).isEqualTo("Homer");
|
||||
assertThat(employee.getLastName()).isEqualTo("Simpson");
|
||||
assertThat(employee.getAge()).isEqualTo(44);
|
||||
}
|
||||
|
||||
@Test
|
||||
void orderToJson() throws JsonProcessingException {
|
||||
Order order = new Order(1, LocalDate.of(1900,2,1));
|
||||
|
||||
String json = objectMapper.writeValueAsString(order);
|
||||
|
||||
System.out.println(json);
|
||||
}
|
||||
|
||||
@Test
|
||||
void orderToJsonWithDate() throws JsonProcessingException {
|
||||
Order order = new Order(1, LocalDate.of(2023, 1, 1));
|
||||
|
||||
String json = objectMapper.writeValueAsString(order);
|
||||
|
||||
System.out.println(json);
|
||||
}
|
||||
@Test
|
||||
void fileToOrder() throws IOException {
|
||||
File file = new File("src/test/resources/order.json");
|
||||
|
||||
Order order = objectMapper.readValue(file, Order.class);
|
||||
|
||||
assertThat(order.getDate().getYear()).isEqualTo(2000);
|
||||
assertThat(order.getDate().getMonthValue()).isEqualTo(4);
|
||||
assertThat(order.getDate().getDayOfMonth()).isEqualTo(30);
|
||||
}
|
||||
@Test
|
||||
void fileToCar() throws IOException {
|
||||
File file = new File("src/test/resources/car.json");
|
||||
|
||||
Car car = objectMapper.readValue(file, Car.class);
|
||||
|
||||
assertThat(car.getBrand()).isEqualTo("BMW");
|
||||
}
|
||||
|
||||
@Test
|
||||
void fileToUnrecognizedCar() throws IOException {
|
||||
File file = new File("src/test/resources/carUnrecognized.json");
|
||||
|
||||
Car car = objectMapper.readValue(file, Car.class);
|
||||
|
||||
assertThat(car.getUnrecognizedFields()).containsKey("productionYear");
|
||||
}
|
||||
|
||||
@Test
|
||||
void catToJson() throws JsonProcessingException {
|
||||
Cat cat = new Cat("Monica");
|
||||
|
||||
String json = objectMapper.writeValueAsString(cat);
|
||||
|
||||
System.out.println(json);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
void catToJsonWithMap() throws JsonProcessingException {
|
||||
Cat cat = new Cat("Monica");
|
||||
|
||||
String json = objectMapper.writeValueAsString(cat);
|
||||
|
||||
System.out.println(json);
|
||||
}
|
||||
|
||||
@Test
|
||||
void dogToJson() throws JsonProcessingException {
|
||||
Dog dog = new Dog("Max", 3);
|
||||
|
||||
String json = objectMapper.writeValueAsString(dog);
|
||||
|
||||
System.out.println(json);
|
||||
}
|
||||
@Test
|
||||
void fileToDog() throws IOException {
|
||||
File file = new File("src/test/resources/dog.json");
|
||||
|
||||
Dog dog = objectMapper.readValue(file, Dog.class);
|
||||
|
||||
assertThat(dog.getName()).isEqualTo("bobby");
|
||||
assertThat(dog.getAge()).isNull();
|
||||
}
|
||||
}
|
||||
3
core-java/jackson/jackson/src/test/resources/car.json
Normal file
3
core-java/jackson/jackson/src/test/resources/car.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"carBrand" : "BMW"
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"carBrand" : "BMW",
|
||||
"productionYear": 1996
|
||||
}
|
||||
4
core-java/jackson/jackson/src/test/resources/dog.json
Normal file
4
core-java/jackson/jackson/src/test/resources/dog.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name" : "bobby",
|
||||
"age" : 5
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"firstName":"Homer",
|
||||
"lastName":"Simpson",
|
||||
"age":44
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
[
|
||||
{
|
||||
"firstName":"Marge",
|
||||
"lastName":"Simpson",
|
||||
"age":33
|
||||
},
|
||||
{
|
||||
"firstName":"Homer",
|
||||
"lastName":"Simpson",
|
||||
"age":44
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"firstName":"Homer",
|
||||
"lastName":"Simpson",
|
||||
"age":44,
|
||||
"department": "IT"
|
||||
}
|
||||
4
core-java/jackson/jackson/src/test/resources/order.json
Normal file
4
core-java/jackson/jackson/src/test/resources/order.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"id" : 1,
|
||||
"date" : "30/04/2000"
|
||||
}
|
||||
Reference in New Issue
Block a user