简体   繁体   中英

Creating complex JSON payload from Java Pojo Jackson

I want to create below JSON payload

{
 "maxResults":3,
 "counter":0,
 "customerParameters":{
    "filters":[
        {
            "name":"customerId",
            "operator":"=",
            "value":["hello"]
        }
        ]
 },
"dealerParameters":[
    {
        "name":"club"
    },
     {
        "name":"token"
    }
    ]
 }

Coded so far:

 @JsonInclude(JsonInclude.Include.NON_NULL)
 @JsonPropertyOrder({
   "maxResults",
   "counter",
   "customerParameters",
   "dealerParameters"
})
public class CustomerModel {

 @JsonProperty("maxResults")
 private Integer maxResults;
 @JsonProperty("counter")
 private Integer counter;
 @JsonProperty("customerParameters")
 private CustomerParameters customerParameters;
 @JsonProperty("dealerParameters")
 private List<DealerParameter> dealerParameters = null;

 @JsonProperty("customerParameters")
 public CustomerParameters getCustomerParameters() {
  return customerParameters;
  }
 @JsonProperty("customerParameters")
 public void setCustomerParameters(CustomerParameters customerParameters) {
   this.customerParameters = customerParameters;
 }
 @JsonProperty("dealerParameters")
 public List<DealerParameter> getDealerParameters() {
  return dealerParameters;
 }
 @JsonProperty("dealerParameters")
 public void setDealerParameters(List<DealerParameter> dealerParameters) {
  this.dealerParameters = dealerParameters;
 } 
  // Getter/Setter for other params
    }

CustomerParameters.java

 @JsonInclude(JsonInclude.Include.NON_NULL)
 @JsonPropertyOrder({
 "filters"
 })
 public class CustomerParameters {
 @JsonProperty("filters")
 private List<Filter> filters = null;
  // Setter and Getter for filters parameter
}

DealerParameters.java

 @JsonInclude(JsonInclude.Include.NON_NULL)
 @JsonPropertyOrder({
 "name"
 })
 public class DealerParameter {
  @JsonProperty("name")
  private String name;
  @JsonProperty("name")
  public String getName() {
  return name;
  }
  @JsonProperty("name")
  public void setName(String name) {
  this.name = name;
  }
 }

Filter.java

 @JsonInclude(JsonInclude.Include.NON_NULL)
 @JsonPropertyOrder({
  "name",
  "operator",
  "value"
 })
 public class Filter {

 @JsonProperty("name")
 private String name;
 @JsonProperty("operator")
 private String operator;
 @JsonProperty("value")
 private List<String> value = null;

 @JsonProperty("value")
 public List<String> getValue() {
 return value;
 }
 @JsonProperty("value")
 public void setValue(List<String> value) {
 this.value = value;
 }
 // Setter and Getter for other properties
}

Missing Part:

   @Controller
   public class TestContoller {
     RestTemplate restTemplate;
         
  1. Should I instantiate each pojo class with new operator as below and set all required parameters? or any other approach of creating JSON payload?

     CustomerModel customerModel= new CustomerModel(); customerModel.setMaxResults(1); Filter filter= new Filter(); filter.setName("customerID"); filter.setOperator("-"); filter.setValue(Arrays.asList("club")); CustomerParameters customerParameters = new CustomerParameters(); customerParameters.setFilters(Arrays.asList(filter)); customerModel.setCustomerParameters(customerParameters);
  2. For DealerParameter class, I want to create multiple objects with same key different value(see the json payload I mentioned above). Below code creates only one object "name":"dealerId"

     DealerParameter dealerParameter = new DealerParameter(); dealerParameter.setName("dealerId"); customerModel.setDealerParameters(dealerParameter); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.writeValueAsString(customerModel); restTemplate.exchange(todo); // restful service call

    }

you are already using " ObjectMapper ", And ObjectMapper has readValue() method. By using readValue() method you can populate all data at a time like below:--

ObjectMapper objectMapper = new ObjectMapper();

 //populating data from json string to POJO  
 CustomerModel  customerModel = objectMapper.readValue(<json String>,CustomerModel.class);

 System.out.println(objectMapper.writeValueAsString(customerModel); // print all data

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM