Payload Transformation: JSON to Object

DZone 's Guide to

Payload Transformation: JSON to Object

See how to transform an incoming JSON payload into a Java object. Lots of development work revolves around payload transformation, so this is important to know.

· Integration Zone ·
Free Resource

When you are first starting out with Mule, it is very important to learn the basics, such as how to manipulate the incoming payload.

In this article, I am going to explain how you to transform an incoming payload (JSON) to a Java object.

Most of the work in development revolves around payload transformation, so it is very important to tackle this — especially for beginners.

I will first show the basics, and later on, we will get into the more advanced stuff.

The Basics

Let's first start by posting a very basic JSON string as payload.

Image title

Given the JSON string above, let's now define a transformer component in our flow.

In our case, we are going to use a JSON to Object transformer.

Image title

Under the General properties of the JSON to Object transformer component, you can define your desired return class.

Let's define java.util.HashMap as the return class for this example.

Image title

Once you run the flow above, our JSON string payload is then converted to a Java object HashMap. You will then be able to access the properties of your payload through payload.<propertyname>, wherepropertyname is defined in the JSON string (i.e. payload.age).

You can also use other Java Objects such as java.util.ArrayList, java.util.LinkedList, etc.

Taking It Further

What if you would like to transform the incoming JSON string into a custom Java object?

In order for us to satisfy this, let's first define a custom Java class (Student) withGET and SET methods.

Image title

Note: The custom Java class' variables should have the exact same name (case sensitive) as the JSON string's properties. If the names are different, the transformer component will throw an error.

Once this is done, we can then change the return class of the JSON to Object transformer component we defined earlier to our custom class: packageName.className.

For example, myschool.model.Student:

Image title

Let's try to debug this example.

Image title

As you can see, our original payload has been transformed into the custom Java object Student.

We can then try to access the properties of our payload through payload.<propertyname>,propertyname being defined in the custom Java class — i.e. payload.age.

Next Steps

How about transforming the JSON String into a custom Java object with a custom Java object children?

Does this also work using the JSON to Object component?

The answer is yes!

Let's try to make our JSON string a little bit more complex.

Image title

We now have an additional JSON properties named subjects.

If we are going to use the previous custom Java class we defined, the transformer component will throw an UnrecognizedPropertyException exception since we have not defined any property named subjects in our Java class.

In order for us to satisfy this condition, let's first start creating another class named Subject and add the list of Subject into our Student class later on.

Our Subject class should look like this:

Image title

After defining our Subject class, we can then add it into our Student class.

Add the following code into Student.java: private List subjects; .

Don't forget to add the GET and SET methods for the newly added variable subjects.

Image title

Let's now test our application and check to see if the payload transformation to our newly defined custom Java class is successful.

Image title

As you can see from the image above, our JSON string has been successfully transformed into our new custom Java object!

mule ,tutorial ,integration ,payload transformer ,json to java object

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}