当指定某个时段时,我们准备一个Web API,该API返回该时段中每个日期的数据。如何设计模型以存储动态字段ResponseBody
具体地说,POST
{"targetFrom": "2016-04-01", "targetTo": "2016-04-03"}}
以下JSON数据被返回。
{
"meta": {
"StartTime": "2017-06-01T06:50:28.001344102Z",
"execute_time": 7532.0517,
"host": "49a6ced149d2",
"rid": ""
},
"result": {
"2016-04-01": {
"0:num": 121,
"0:price": 5244614,
"1:num": 124,
"1:price": 6324547,
"2:num": 115,
"2:price": 5604491
},
"2016-04-02": {
"0:num": 125,
"0:price": 6321222,
"1:num": 117,
"1:price": 5835030,
"2:num": 118,
"2:price": 5771826
},
"2016-04-03": {
"0:num": 118,
"0:price": 5486071,
"1:num": 131,
"1:price": 6563447,
"2:num": 111,
"2:price": 5740078
},
"subTotal": {
"total_2016-04-01_num": 360,
"total_2016-04-01_price": 17173652,
"total_2016-04-02_num": 360,
"total_2016-04-02_price": 17928078,
"total_2016-04-03_num": 360,
"total_2016-04-03_price": 17789596
},
"total": {
"num": 1080,
"price": 52891326
}
}
}
问题是日期字段的一部分,如“2016-04-01”。 我想在SpringBoot的应用程序端接受这个,考虑处理修改,并且想要定义一个合适的模型。 但是,我找不到一个好方法。
首先,我认为以下是愚蠢的做法。
@JsonProperty("2016-04-01")
private ResAnalyzeResultDayDto result_20160401;
这是愚蠢的,因为它不能对应于取决于参数targetFrom或targetTo在询价时返回的数据。
那么,我们如何定义一个模型来处理响应数据,并根据请求动态变化呢? 如果你有一个好主意,请告诉我。
附加说明: 我没有相处得很好,因为我写了下面的代码。
@JsonProperty("[0-9]{4}-[0-9]{2}-[0-9]{2}")
private Map<String,ResAnalyzeResultSubTotalDayDto> maps;
首先,“@ JsonProperty”似乎并不能够使用正则表达式,我不认为它会自动设置地图的关键。
请求部分的代码使用“RestTemplate”。
ReqTotalSalesStatusDto reqGoMonth = new ReqTotalSalesStatusDto();
reqGoMonth.setStrTo("2016-04-03");
reqGoMonth.setStrFrom("2016-04-01");
// Jackson2HttpMessage
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
ResponseEntity<ResAnalyzeDto> resultGoMonth = restTemplate.exchange(
"http://localhost:18000/analyze"
, HttpMethod.POST
, new HttpEntity<>(reqGoMonth)
, ResAnalyzeDto.class);
嗨,你能分担率R esAnalyzeResultDayDto类和代码片段在哪里执行投射?原因可能是变量名称不匹配(Java不允许带有':'的变量名,比如2:num) – barbakini