How to Serialize and Deserialize Enum with JSON-B / Yasson


Json binding has recently been introduced to java as part of the JSR 367 specification. JSON binding api specifies the specifications for converting generic java objects to json format and converting json strings to generic java objects. In this article, we will see how to convert the Enum object to json string and how to convert the json string to a enum object.

Enum is a user defined data type that contains a collection of user defined values. The example for enum is weekdays. The 7 weekdays are unique values that will not fit into any of the common category like number, string, character etc. Here we will see json binding api with yasson implementation for an enum object.

The javax.json.bind dependency on the spring boot attaches the dependent jars to the spring boot project. Here we see the step-by-step process for building a spring boot application that converts a json string to a enum java object and converts a enum java object to a json string.



Step 1 – Create pom.xml with dependency

The first step is to build a spring boot application. The spring boot framework includes two simple “spring-boot-starter” and “spring-boot-starter-test” dependencies. To add json binding jars to the project, add “javax.json.bind-api” dependency to the pom.xml file. This is a specification api jar that enforces all json binding specifications.

Add the json binding jars to the spring boot program. The default json binding is org.eclipse.yasson. Add “org.eclipse.yasson” and “org.glassfish.javax.json” to the pom.xml file. The pom.xml file below includes all the dependency for json binding.

pom.xml

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.5.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.yawintutor</groupId>
	<artifactId>Spring-Application</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>SpringBootJsonbSimple</name>
	<description>Spring Boot Project</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>javax.json.bind</groupId>
			<artifactId>javax.json.bind-api</artifactId>
		</dependency>

		<dependency>
			<groupId>org.eclipse</groupId>
			<artifactId>yasson</artifactId>
			<version>1.0.6</version>
		</dependency>

		<dependency>
			<groupId>org.glassfish</groupId>
			<artifactId>javax.json</artifactId>
			<version>1.1.4</version>
			<scope>provided</scope>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>


Step 2 – Create Enum and Java Bean Class

Build a java bean object that will be transformed to a json object in the spring boot framework. The Java Bean object will contain all private variables and public getter and setter methods. The java bean object must have a default constructor.

The java bean class contains a enum type variable. The getter and setter is created for the enum type variable. The example below shows a sample of the java bean model.

Course.java

package com.yawintutor;

public enum Course {
	BA,
	BCOM,
	BE
}

Student.java

package com.yawintutor;

public class Student {

	private int id;

	private String name;
	
	private Course course;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Course getCourse() {
		return course;
	}

	public void setCourse(Course course) {
		this.course = course;
	}

}


Step 3 – JSON Binding API code to convert Enum Java Bean Object

The json binding api supports to create a enum java bean object by taking input as a json string. The example below demonstrates how to build a enum java bean object and how to convert a json string to enum java bean object.

SpringBootJsonbSimpleApplication.java

package com.yawintutor;

import javax.json.bind.Jsonb;
import javax.json.bind.JsonbBuilder;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootJsonbSimpleApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringBootJsonbSimpleApplication.class, args);
		
		JavaObjecttoJSON();
		JSONToJavaObject();
	}
	
	public static void JavaObjecttoJSON() {
		Student student = new Student();
		student.setId(100);
		student.setName("Yawin");
		student.setCourse(Course.BCOM);

		Jsonb jsonb = JsonbBuilder.create();
		String jsonString = jsonb.toJson(student);
		System.out.println("Json format String : " + jsonString);
	}

	public static void JSONToJavaObject() {
		String jsonString = "{\"course\":\"BCOM\",\"id\":100,\"name\":\"Yawin\"}";

		Jsonb jsonb = JsonbBuilder.create();
		Student st = jsonb.fromJson(jsonString, Student.class);
		System.out.println(st.getId() + " " + st.getName()+" "+st.getCourse().name());
	}

}

Output


  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.5.RELEASE)

2020-03-18 20:56:14.438  INFO 43196 --- [           main] c.y.SpringBootJsonbSimpleApplication     : Starting SpringBootJsonbSimpleApplication on banl1691b9157 with PID 43196 (/Users/knatarajan2/STS/workspace/SpringBootJsonbSimple/target/classes started by knatarajan2 in /Users/knatarajan2/STS/workspace/SpringBootJsonbSimple)
2020-03-18 20:56:14.441  INFO 43196 --- [           main] c.y.SpringBootJsonbSimpleApplication     : No active profile set, falling back to default profiles: default
2020-03-18 20:56:14.878  INFO 43196 --- [           main] c.y.SpringBootJsonbSimpleApplication     : Started SpringBootJsonbSimpleApplication in 0.688 seconds (JVM running for 3.316)
Json format String : {"course":"BCOM","id":100,"name":"Yawin"}
100 Yawin BCOM



Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *