0

I use Jackson 2.9.8 for converting my below POJO as JSON:

public class ResponseEntity implements Serializable {

    private static final long serialVersionUID = 1L;
    private int total_record_count;
    private int filtered_record_count;
    @JsonProperty("list")
    private List<Map<String,Object>> entityList;

    public ResponseEntity(List<Map<String,Object>> entityList)  {
        this.entityList = entityList;
        this.filtered_record_count = entityList.size();
    }

    public int getTotal_record_count() {
        return total_record_count;
    }
    public void setTotal_record_count(int total_record_count) {
        this.total_record_count = total_record_count;
    }
    public int getFiltered_record_count() {
        return filtered_record_count;
    }
    public void setFiltered_record_count(int filtered_record_count) {
        this.filtered_record_count = filtered_record_count;
    }
    public List<Map<String, Object>> getEntityList() {
        return entityList;
    }
    public void setEntityList(List<Map<String, Object>> entityList) {
        this.entityList = entityList;
    }
}

In the result JSON, value of entityList member is mapped to list key as it's annotated with @JsonProperty("list"):

{
   "list" : [ {
     "id" : "IID000000002129959",
     "attr1" : "MY",
     "attr2" : "sd",
     "attr3" : true   }]
}

But I need to customise it with different names. For some response it should be busines1, business2, etc.

How do I make JsonProperty name dynamic?

1

1 Answer 1

1

You can provide name in constructor and use JsonAnyGetter. Below solution:

import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

import java.io.Serializable;
import java.util.Collections;
import java.util.List;
import java.util.Map;

public class JsonApp {

    public static void main(String[] args) throws Exception {
        ResponseEntity entity = new ResponseEntity("dynList",
                Collections.singletonList(Collections.singletonMap("key", "value1")));

        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(SerializationFeature.INDENT_OUTPUT);

        System.out.println(mapper.writeValueAsString(entity));
    }
}

class ResponseEntity implements Serializable {

    private static final long serialVersionUID = 1L;
    private int total_record_count;
    private int filtered_record_count;

    private String propertyName;

    @JsonIgnore
    private List<Map<String, Object>> entityList;

    public ResponseEntity(String propertyName, List<Map<String, Object>> entityList) {
        this.propertyName = propertyName;
        this.entityList = entityList;
        this.filtered_record_count = entityList.size();
    }

    @JsonAnyGetter
    public Map<String, Object> otherProperties() {
        return Collections.singletonMap(propertyName, entityList);
    }

    // other methods
}

prints:

{
  "total_record_count" : 0,
  "filtered_record_count" : 1,
  "dynList" : [ {
    "key" : "value1"
  } ]
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.