From Java Object to JSON and Back with Jakarta JSON Binding (JSON-B) 📎
<dependency>
<groupId>org.eclipse</groupId>
<artifactId>yasson</artifactId>
<version>2.0.2</version>
</dependency>
Now a Java class:
import java.util.Date;
public class Workshop {
public String title;
public Date date;
public String description;
}
...can be serialized and deserialized with JSON-B:
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import airhacks.workshops.entity.Workshop;
import jakarta.json.bind.JsonbBuilder;
import jakarta.json.bind.JsonbConfig;
public interface Mapper {
final static String FILE = "workshops.json";
static void save(Workshop workshop) {
var jsonb = JsonbBuilder.create(new JsonbConfig().withFormatting(true));
try (var writer = new FileWriter(FILE)) {
jsonb.toJson(workshop, writer);
} catch (IOException ex) {
throw new IllegalStateException(ex);
}
}
static Workshop load() {
try (var reader = new FileReader(FILE)) {
return JsonbBuilder.create().fromJson(reader, Workshop.class);
} catch (IOException ex) {
throw new IllegalStateException(ex);
}
}
}
...in a JUnit test:
import java.util.Date;
import org.junit.jupiter.api.Test;
public class JSONBTest {
@Test
public void serializeThenDeserialize() {
var workshop = new Workshop();
workshop.date = new Date();
workshop.description = "no slides";
workshop.title = "java and jakarta";
Mapper.save(workshop);
var copy = Mapper.load();
assertEquals(workshop.title, copy.title);
}
}
...and the content of the workshops.json
is:
{
"date": "2021-10-03T05:25:42.168Z[UTC]",
"description": "no slides",
"title": "java and jakarta"
}