forked from eugenp/tutorials
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request eugenp#14228 from tudormarc/tudor-jacksonjr
BAEL-6310 - guide to JacksonJr
- Loading branch information
Showing
8 changed files
with
288 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xmlns="http://maven.apache.org/POM/4.0.0" | ||
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> | ||
<artifactId>jackson-jr</artifactId> | ||
<name>jackson-jr</name> | ||
<packaging>pom</packaging> | ||
|
||
<parent> | ||
<groupId>com.baeldung</groupId> | ||
<artifactId>parent-java</artifactId> | ||
<version>0.0.1-SNAPSHOT</version> | ||
<relativePath>../parent-java</relativePath> | ||
</parent> | ||
|
||
<dependencies> | ||
<!--jackson jr all --> | ||
<dependency> | ||
<groupId>com.fasterxml.jackson.jr</groupId> | ||
<artifactId>jackson-jr-all</artifactId> | ||
<version>2.15.2</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>com.fasterxml.jackson.jr</groupId> | ||
<artifactId>jackson-jr-annotation-support</artifactId> | ||
<version>2.15.2</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.projectlombok</groupId> | ||
<artifactId>lombok</artifactId> | ||
<version>RELEASE</version> | ||
<scope>compile</scope> | ||
</dependency> | ||
|
||
</dependencies> | ||
|
||
</project> |
22 changes: 22 additions & 0 deletions
22
jackson-jr/src/main/java/com/baeldung/jacksonjr/CustomDateDeserializer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package com.baeldung.jacksonjr; | ||
|
||
import com.fasterxml.jackson.jr.ob.api.ValueReader; | ||
import com.fasterxml.jackson.jr.ob.impl.JSONReader; | ||
import com.fasterxml.jackson.jr.private_.JsonParser; | ||
|
||
import java.io.IOException; | ||
import java.time.LocalDate; | ||
import java.time.format.DateTimeFormatter; | ||
|
||
public class CustomDateDeserializer extends ValueReader { | ||
private final static DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd"); | ||
|
||
public CustomDateDeserializer () { | ||
super(LocalDate.class); | ||
} | ||
|
||
@Override | ||
public Object read (JSONReader jsonReader, JsonParser jsonParser) throws IOException { | ||
return LocalDate.parse(jsonParser.getText(), dtf); | ||
} | ||
} |
20 changes: 20 additions & 0 deletions
20
jackson-jr/src/main/java/com/baeldung/jacksonjr/CustomDateSerializer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package com.baeldung.jacksonjr; | ||
|
||
import com.fasterxml.jackson.jr.ob.api.ValueWriter; | ||
import com.fasterxml.jackson.jr.ob.impl.JSONWriter; | ||
import com.fasterxml.jackson.jr.private_.JsonGenerator; | ||
|
||
import java.io.IOException; | ||
import java.time.LocalDate; | ||
|
||
public class CustomDateSerializer implements ValueWriter { | ||
@Override | ||
public void writeValue (JSONWriter jsonWriter, JsonGenerator jsonGenerator, Object o) throws IOException { | ||
jsonGenerator.writeString(o.toString()); | ||
} | ||
|
||
@Override | ||
public Class<?> valueType () { | ||
return LocalDate.class; | ||
} | ||
} |
96 changes: 96 additions & 0 deletions
96
jackson-jr/src/main/java/com/baeldung/jacksonjr/JacksonJrFeatures.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
package com.baeldung.jacksonjr; | ||
|
||
import com.fasterxml.jackson.jr.annotationsupport.JacksonAnnotationExtension; | ||
import com.fasterxml.jackson.jr.ob.JSON; | ||
import com.fasterxml.jackson.jr.ob.JacksonJrExtension; | ||
import com.fasterxml.jackson.jr.ob.api.ExtensionContext; | ||
|
||
import java.io.IOException; | ||
import java.util.LinkedHashMap; | ||
|
||
public class JacksonJrFeatures { | ||
|
||
public static String jsonObject() throws IOException { | ||
return JSON.std | ||
.with(JSON.Feature.PRETTY_PRINT_OUTPUT) | ||
.asString(new LinkedHashMap<String, Object>() {{ | ||
put("name", "John Doe"); | ||
put("age", 30); | ||
}}); | ||
} | ||
|
||
public static String jsonComposer() throws IOException { | ||
return JSON.std | ||
.with(JSON.Feature.PRETTY_PRINT_OUTPUT) | ||
.composeString() | ||
.startObject() | ||
.startArrayField("objectArray") | ||
.startObject() | ||
.put("name", "name1") | ||
.put("age", 11) | ||
.end() | ||
.startObject() | ||
.put("name", "name2") | ||
.put("age", 12) | ||
.end() | ||
.end() | ||
.startArrayField("array") | ||
.add(1) | ||
.add(2) | ||
.add(3) | ||
.end() | ||
.startObjectField("object") | ||
.put("name", "name3") | ||
.put("age", 13) | ||
.end() | ||
.put("last", true) | ||
.end() | ||
.finish(); | ||
} | ||
|
||
public static String objectSerialization(Person person) throws IOException { | ||
return JSON.std | ||
.with(JSON.Feature.PRETTY_PRINT_OUTPUT) | ||
.asString(person); | ||
} | ||
|
||
public static String objectAnnotationSerialization(Person person) throws IOException { | ||
return JSON.builder() | ||
.register(JacksonAnnotationExtension.std) | ||
.build() | ||
.with(JSON.Feature.PRETTY_PRINT_OUTPUT) | ||
.asString(person); | ||
} | ||
|
||
public static String customObjectSerialization(Person person) throws IOException { | ||
return JSON.builder() | ||
.register(new JacksonJrExtension() { | ||
@Override | ||
protected void register (ExtensionContext extensionContext) { | ||
extensionContext.insertProvider(new MyHandlerProvider()); | ||
} | ||
}) | ||
.build() | ||
.with(JSON.Feature.PRETTY_PRINT_OUTPUT) | ||
.asString(person); | ||
} | ||
|
||
public static Person objectDeserialization(String json) throws IOException { | ||
return JSON.std | ||
.with(JSON.Feature.PRETTY_PRINT_OUTPUT) | ||
.beanFrom(Person.class, json); | ||
} | ||
|
||
public static Person customObjectDeserialization(String json) throws IOException { | ||
return JSON.builder() | ||
.register(new JacksonJrExtension() { | ||
@Override | ||
protected void register (ExtensionContext extensionContext) { | ||
extensionContext.insertProvider(new MyHandlerProvider()); | ||
} | ||
}) | ||
.build() | ||
.with(JSON.Feature.PRETTY_PRINT_OUTPUT) | ||
.beanFrom(Person.class, json); | ||
} | ||
} |
28 changes: 28 additions & 0 deletions
28
jackson-jr/src/main/java/com/baeldung/jacksonjr/MyHandlerProvider.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package com.baeldung.jacksonjr; | ||
|
||
import com.fasterxml.jackson.jr.ob.api.ReaderWriterProvider; | ||
import com.fasterxml.jackson.jr.ob.api.ValueReader; | ||
import com.fasterxml.jackson.jr.ob.api.ValueWriter; | ||
import com.fasterxml.jackson.jr.ob.impl.JSONReader; | ||
import com.fasterxml.jackson.jr.ob.impl.JSONWriter; | ||
|
||
import java.time.LocalDate; | ||
|
||
public class MyHandlerProvider extends ReaderWriterProvider { | ||
|
||
public ValueWriter findValueWriter (JSONWriter writeContext, | ||
Class<?> type) { | ||
if (type == LocalDate.class) { | ||
return new CustomDateSerializer(); | ||
} | ||
return null; | ||
} | ||
|
||
@Override | ||
public ValueReader findValueReader (JSONReader readContext, Class<?> type) { | ||
if (type.equals(LocalDate.class)) { | ||
return new CustomDateDeserializer(); | ||
} | ||
return null; | ||
} | ||
} |
19 changes: 19 additions & 0 deletions
19
jackson-jr/src/main/java/com/baeldung/jacksonjr/Person.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package com.baeldung.jacksonjr; | ||
|
||
import com.fasterxml.jackson.annotation.JsonFormat; | ||
import com.fasterxml.jackson.annotation.JsonProperty; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Data; | ||
import lombok.NoArgsConstructor; | ||
|
||
import java.time.LocalDate; | ||
|
||
@Data | ||
@NoArgsConstructor | ||
@AllArgsConstructor | ||
public class Person { | ||
@JsonProperty("person_name") | ||
private String name; | ||
private int age; | ||
private LocalDate birthDate; | ||
} |
64 changes: 64 additions & 0 deletions
64
jackson-jr/src/test/java/com/baeldung/jacksonjr/JacksonJrFeaturesUnitTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
package com.baeldung.jacksonjr; | ||
|
||
import org.junit.jupiter.api.Test; | ||
|
||
import java.io.IOException; | ||
import java.time.LocalDate; | ||
|
||
import static org.junit.jupiter.api.Assertions.*; | ||
|
||
public class JacksonJrFeaturesUnitTest { | ||
|
||
@Test | ||
public void whenSerializingObject_thenReturnJson() throws IOException { | ||
String json = JacksonJrFeatures.jsonObject(); | ||
assertTrue(json.contains("name")); | ||
assertTrue(json.contains("age")); | ||
} | ||
|
||
@Test | ||
public void whenSerializingComposer_thenReturnJson() throws IOException { | ||
String json = JacksonJrFeatures.jsonComposer(); | ||
assertTrue(json.contains("objectArray")); | ||
assertTrue(json.contains("object")); | ||
} | ||
|
||
@Test | ||
public void whenSerializingSimpleObject_thenAnnotationIsNotConsidered() throws IOException { | ||
Person person = new Person("John Doe", 30, null); | ||
String json = JacksonJrFeatures.objectSerialization(person); | ||
assertTrue(json.contains("name")); | ||
assertFalse(json.contains("person_name")); | ||
} | ||
|
||
@Test | ||
public void whenDeserializingJsonObject_thenObjectsAreEqual() throws IOException { | ||
Person person = new Person("John Doe", 30, null); | ||
String json = JacksonJrFeatures.objectSerialization(person); | ||
Person deserializedPerson = JacksonJrFeatures.objectDeserialization(json); | ||
assertEquals(person, deserializedPerson); | ||
} | ||
|
||
@Test | ||
public void whenSerializingWithAnnotations_thenAnnotationIsConsidered() throws IOException { | ||
Person person = new Person("John Doe", 30, null); | ||
String json = JacksonJrFeatures.objectAnnotationSerialization(person); | ||
assertTrue(json.contains("person_name")); | ||
} | ||
|
||
@Test | ||
public void whenSerializingCustomObject_thenLocalDateIsSerializedAsString() throws IOException { | ||
Person person = new Person("John Doe", 30, LocalDate.now()); | ||
String json = JacksonJrFeatures.customObjectSerialization(person); | ||
System.out.println(json); | ||
assertTrue(json.contains("birthDate")); | ||
} | ||
|
||
@Test | ||
public void whenDeserializingCustomObject_thenLocalDateIsDeserialized() throws IOException { | ||
Person person = new Person("John Doe", 30, LocalDate.now()); | ||
String json = JacksonJrFeatures.customObjectSerialization(person); | ||
Person deserializedPerson = JacksonJrFeatures.customObjectDeserialization(json); | ||
assertEquals(person, deserializedPerson); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters