2017-08-10 48 views
1

我被要求使用動態參數來實現對REST Web服務的請求。我將用一個例子來解釋一下: 現在我們的請求對象的字段是三個字符串,它們是從控制器獲取的並用於實現業務邏輯。明天,我們可能需要引入另一個參數,所以我建議使用Map來實現請求對象,這樣我們就可以在請求中管理超過3個屬性,而無需打開代碼並且不得不重新部署服務。Rest中的動態請求參數WS

現在,我的問題是,這可能嗎?我想是的,但無論如何,控制器不知道如何處理新插入的屬性,或者它永遠不會使用它!所以,恕我直言,這是無用的返工,因爲我們需要打開代碼並重新部署.war。

在此先感謝您的幫助。

P.S. Web服務是爲GraphDB的包裝要求,如果它可以幫助

回答

0

如果您正在使用GET方法,你可以得到的參數名稱值如下圖所示片段:

@GET 
public String get(@Context UriInfo ui) { 
    MultivaluedMap<String, String> queryParams = ui.getQueryParameters(); 
    MultivaluedMap<String, String> pathParams = ui.getPathParameters(); 
} 

對於表單參數就可以做到以下幾點:

@POST 
@Consumes("application/x-www-form-urlencoded") 
public void post(MultivaluedMap<String, String> formParams) { 
    // Store the message 
} 

通過使用MultivaluedMap,你可以傳遞任何參數TH e Rest服務,您可以處理業務邏輯。

參考:Extracting request params

+0

謝謝,這是我需要的一個很好的實現。但是我沒有解釋我的主要疑問,對不起。 如果我實現了這種請求,有一天我需要向我的請求中引入另一個屬性,我是否需要打開代碼?或者我只需要將屬性添加到我的請求中? 再次感謝 –

+0

如果您在客戶端添加屬性,您應該更改客戶端的代碼...因爲您沒有使用任何DTO,如果沒有任何效果影響服務,您不會更改服務端。您將更改所需的服務方法及其業務邏輯。 – NamingException