當指定某個時段時,我們準備一個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