【发布时间】:2021-07-23 11:18:45
【问题描述】:
我想在 JSON 负载下创建
{
"maxResults":3,
"counter":0,
"customerParameters":{
"filters":[
{
"name":"customerId",
"operator":"=",
"value":["hello"]
}
]
},
"dealerParameters":[
{
"name":"club"
},
{
"name":"token"
}
]
}
编码至今:
@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;
}
}
过滤器.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
}
缺少的部分:
@Controller
public class TestContoller {
RestTemplate restTemplate;
-
我应该用下面的 new 运算符实例化每个 pojo 类并设置所有必需的参数吗?或任何其他创建 JSON 有效负载的方法?
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); -
对于 DealerParameter 类,我想用 same key 不同的值创建多个对象(参见我上面提到的 json 有效负载)。下面的代码只创建一个对象 "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}
【问题讨论】:
-
您可以使用工厂模式来封装细节,从而减少实例化 CustomerModel 对象的样板代码
-
您是否考虑尝试使用@ConfigurationProperties 创建您的customerModel 对象?这可能不是最好的方法,但可能会有所帮助。
-
@Nikolai。你能提供一些参考吗?
标签: java json spring-boot jackson