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>