2016-02-26 28 views
1

我想通過在單個調用中設置一系列對象上的值來提供我的API。看似合乎邏輯的解決方案是讓用戶在URI中的範圍內定義並在請求主體中設置所需的新值。例如,所述URI是:在同一個servlet請求中區分URI和請求主體參數

/api/horses/?color=brown 

在請求正文,密鑰/值對將是

key: color 
value: red 

這將打開所有的褐色馬紅。

問題是,從HttpServletRequest對象獲取參數不會讓您確定是否在URI或正文中設置了參數。

也許這裏還有兩個問題:

  1. 如果有不同的,普遍接受的RESTful方式來設置一個範圍對象的值在單呼,是什麼呢?
  2. 如果同時使用URI和請求主體參數,那麼您如何區分HttpServletRequest對象中的那些參數呢?

更新:接受的答案地址如何區分(的列舉的第二個問題)。爲了解決更新一系列值的一般挑戰,我決定通過限制只更新一個字段並指定路徑中的字段來實現這一點。像這樣:

PUT /api/horses/color?from=brown&to=red 

回答

1

所以你的問題是你在請求行中編碼的參數和POST主體中編碼的參數之間有名稱衝突。

你總是可以通過調用區分:

  • HttpServletRequest.getQueryString()
  • HttpServletRequest.getInputStream()

顯然你就必須使用URL庫在JDK解析查詢字符串(編碼器/解碼器是好的)和庫的表單數據,這取決於編碼(我記得一些名爲commons-codec的Apache項目)。

我會去沒有名稱衝突的最簡單的路線 - 例如通過在filter-前加URL參數,但沒有這方面的標準規則。