簡體   English   中英

為搜索操作數JSON構建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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM