[英]What is the best way to build and expose a Machine Learning model REST api?
[英]Best way to build REST api for a search with operands JSON
我正在嘗試為我的應用程序構建REST api。 基本操作完成。 但是現在我需要一些幫助來搜索不同的參數及其操作數。
假設我有一個像這樣的JSON字符串:
{"v00Datvon":"09-07-2014","v00Datbis":"09-07-2014","v00Saicode":{"saiCode":"SO02"}}
這些是我的“合約”域對象的值。
對於用戶界面部分的搜索,您可以為兩個日期選擇一個操作數(大於或小於或等於)
所有參數(無操作數)均按GET和Ajax調用發送。
Spring MVC控制器如下所示:
@RequestMapping(value = "/", method = RequestMethod.GET, headers = "Accept=application/json")
public ResponseEntity<String> getContractsFromSearch(@RequestParam String allRequestParams, ModelMap model){
//some stuff
}
我正在尋找技術投入,如何將操作數以一種干凈,好的方式添加到JSON字符串和控制器中。 我不想破解一些錯誤的代碼。 如果您需要更多輸入,請發表評論。 謝謝!
更新1。
GET請求:
allRequestParams={"v00Datvon":"09-07-2014","v00Datbis":"09-07-2014","v00Saicode":{"saiCode":"SO02"}}
更新2。
{
"dateFrom": {
"dateFrom": "someDate",
"operand": "less"
},
"dateTo": {
"dateTo": "someDate",
"operand": "greater"
},
"season": {
"season": "someSeason",
"operand": "equals"
}
}
更新3反序列化:
public static Contract fromJsonToContract(String json) {
return new JSONDeserializer<Contract>().use(Calendar.class, new CalendarTransformer("dd-MM-yyyy HH:mm")).use(null, Contract.class).deserialize(json);
}
首先,根據您的控制器,您如何將地圖作為requestParam傳遞,這不可能,請嘗試一下
@RequestMapping(value = "/", method = RequestMethod.GET, headers = "Accept=application/json")
public ResponseEntity<String> getContractsFromSearch(HttpServletRequest request, Object> allRequestParams, ModelMap model){
Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements())
{
String paramName =
(String)paramNames.nextElement();
out.print(paramName);
}
//some stuff
}
我認為您的JSON太冗長:您有一個名為“ dateFrom”的條目,而該條目有一個名為“ dateFrom”的條目,請嘗試使其簡單而扁平。 那這個選項呢?
{
"dateFrom": "someDate",
"operandFrom": "less",
"dateTo": "someDate",
"operandTo": "greater",
"season": "someSeason",
"operandSeason": "equals"
}
我知道按語義分組數據很誘人,但是在GET請求中,您必須考慮處理參數的最佳方法,數據可以輕松轉換為:
dateFrom=someDate&operandFrom=less&dateTo=someDate&operandTo=greater&season=someSeason&operandSeason=equals
或者只發送一個以JSON作為值的參數:
q={"dateFrom": "someDate","operandFrom":"less","dateTo":"someDate","operandTo":"greater","season":"someSeason","operandSeason":"equals"}
但是然后您需要在控制器中對其進行解析。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.