Here, I am using Gson to convert multifield values into JSON format, the first thing which we need to do is first load the Gson maven dependency


I am using below code to read the multifield control child nodes, once the list is populated with Link bean objects then using gson.toJson() method convert entire list into JSON 

package com.aem.toolkit.core.models;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Optional;
import com.adobe.cq.sightly.WCMUsePojo;
public class ListCollectionGenerics extends WCMUsePojo {
	public java.util.List<Link> links;
	public java.util.List<Link> getLinks() {
		Resource childResource = getResource().getChild("items");
		if (childResource != null) {
			Iterator<Resource> linkResources = childResource.listChildren();
			linkResources.forEachRemaining(res -> populateModel(res).ifPresent(links::add));
		return links;
	public Optional<Link> populateModel(Resource resource) {
		links = new ArrayList<Link>();
		Link link = new Link();
		link.setTitle((String) resource.getValueMap().get("linkText"));
		link.setUrl((String) resource.getValueMap().get("linkUrl"));
		return Optional.of(link);
        public String getLinksAsJsonFormat()
           Gson gson = new Gson();
           return gson.toJson(links);
	public void activate() throws Exception {

In the sightly template add below code

<sly data-sly-use.listUse="com.aem.toolkit.core.models.ListCollectionGenerics">

The output is something like below

Serializing certain properties

If you want to serialize only certain properties then you can use Gson based @expose option something like below, the below code will serialize the only linkUrl properly and it will not serialize linkText property

package com.aem.toolkit.core.models;
public class Link {
	private String linkText;
	@Expose(serialize = true)
	private String linkUrl;
	public void setTitle(String linkText) {
		this.linkText = linkText;
	public void setUrl(String linkUrl) {
		this.linkUrl = linkUrl;
	public String getTitle() {
		return linkText;
	public String getUrl() {
		return linkUrl;

In order to work @expose annotation’s properly, you must create Gson instance by using the GsonBuilder class, check below code

      GsonBuilder builder = new GsonBuilder();
		Gson gson = builder.create();
		return gson.toJson(links);


By coderss

Leave a Reply

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