2013-10-03 33 views
1

我已經編寫了Restful Web服務API,它接受兩個不同的對象,是否可以使用Jersey客戶端調用此API。我無法使用Jersey客戶端調用此方法。 這是Rest API的限制,我們無法將多個對象傳遞給方法。在休息中傳遞兩個對象使用Jersey的Api

import javax.ws.rs.Consumes; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 

@Path("/hello") 
public class TimePassService { 

    @POST 
    @Path("/post") 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response saveEmployeeInfo(final Employee input,final Manager input1) { 
     String result = "Employee saved : " + input; 

     System.out.println(input); 
     System.out.println(input1); 
     return Response.status(201).entity(result).build(); 
    } 

} 

當我和一些技術人員所討論的這一點,他們回答說,這是不可能,解決的辦法是包裹這兩個對象到第三對象,然後通過一個單一的對象。

請讓我知道是否有其他解決方案。

回答

4

這是不可能的。見the JAX-RS specification

3.3.2.1實體參數

不與@FormParam或任何在第3.2節中所列出的註釋的註釋的一個參數的值,被稱爲實體參數,從所述請求實體主體映射。實體主體和Java類型之間的轉換是實體提供者的責任,請參見第4.2節。資源方法必須至多有一個實體參數。

只能有一個方法'實體參數'。

你所要求的不會是RESTful。 REST不是RPC(遠程過程調用),你不'傳遞'對象到'方法'。在REST中,您可以從URL中傳輸資源表示並識別URL。

在你的例子中,資源將是一個EmployeeInfo包裝EmployeeManager

此外,/post不是一個非常RESTful的URL。什麼資源由此識別?如果你GET /post會發生什麼?請以REST術語思考,而不是RPC。

0

解決方法是將這兩個對象封裝到第三個對象中,然後傳遞一個對象。 我想知道從客戶端發佈的字符串json如何看起來像?

是這樣的:

[ 
    employee: { 
     "name": "Sury", 
     "age": 23 
    }, 
    manager: { 
     "name": "Beack", 
     "Room": "DC2" 
    } 
] 
相關問題