Serializing and Deserializing a POJO with LocalDate into JSON using JSON-B and Java EE 8 📎
To serialize a POJO with JSON-B from Java EE 8
containing a java.time.LocalDate
, you can either use the default format, or specify
the serialization format with @JsonbDateFormat
annotation:
import java.time.LocalDate;
import javax.json.bind.annotation.JsonbCreator;
import javax.json.bind.annotation.JsonbDateFormat;
import javax.json.bind.annotation.JsonbProperty;
public class Developer {
public LocalDateTime birthdate;
@JsonbDateFormat(value = "yyyy-MM-dd")
public LocalDate firstHack;
@JsonbCreator
public Developer(
@JsonbProperty("birthdate") LocalDateTime birthdate,
@JsonbProperty("firstHack") LocalDate firstHack) {
this.birthdate = birthdate;
this.firstHack = firstHack;
}
}
Now the Developer
can be serialized and deserialized with a javax.json.bind.Jsonb
instance:
import java.time.LocalDate;
import java.time.Month;
import javax.json.bind.Jsonb;
import javax.json.bind.JsonbBuilder;
public class DateSerializationTest {
private Jsonb jsonb;
@Before
public void init() {
this.jsonb = JsonbBuilder.
newBuilder().
build();
}
@Test
public void serialize() {
Developer developer = new Developer(LocalDateTime.of(1995, Month.MARCH, 12, 12, 42),
LocalDate.of(1998, Month.MARCH, 12));
String serialized = this.jsonb.toJson(developer);
System.out.println("serialized = " + serialized);
assertThat(serialized, containsString("birthdate"));
}
@Test
public void deserialize() {
String deserialzed = " {\"birthdate\":\"1995-03-12T12:42:00\",\"firstHack\":\"1998-03-12\"}";
Developer duke = this.jsonb.fromJson(deserialzed, Developer.class);
assertThat(duke.birthdate.getYear(), is(1995));
}
}
To run the example as JUnit test, you will need the following dependencies:
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.eclipse</groupId>
<artifactId>yasson</artifactId>
<version>1.0</version>
<scope>runtime</scope>
</dependency>
See you at Java EE Workshops at Munich Airport, Terminal 2 or Virtual Dedicated Workshops / consulting. Is Munich's airport too far? Learn from home: airhacks.io.