2011-06-25 148 views
1

我正在GAE上開發休息Web服務。我正在使用Jersey框架來實現這些服務。這是一個POST服務,我必須傳遞參數。我試圖用2種標註的,但我不能得到的參數:REST Web服務中的POST HTTP請求的進程參數(JERSEY)

@Context

@POST 
@Path("add") 
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
public Notification addUser(@Context UriInfo uriInfo){ 
    MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters(); 
    String nickname = queryParams.getFirst("nickname"); 
    String name = queryParams.getFirst("name"); 
    String surname = queryParams.getFirst("surname"); 
    String telephone = queryParams.getFirst("telephone"); 
    String email = queryParams.getFirst("email"); 
    User =createUser(nickname, name, surname, telephone, email); 

    ....... 
} 

@QueryParam

@POST 
@Path("add") 
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
public Notification addUser(@QueryParam("nickname") String nickname, @QueryParam("name") String name, @QueryParam("surname") String surname, @QueryParam("telephone") String telephone, @QueryParam("email") String email) { 
    User =createUser(nickname, name, surname, telephone, email); 
    ...... 
} 

但在這兩種情況下,我不能讓所有的參數他們是空值。

這是我的http請求的例子:

Request URL: http://windyser.appspot.com/rest/users/add 
Request Method: POST 
Params: {"nickname":"prova","name":"danilo","surname":"delizia","email":"[email protected]","telephone":"123"} 
Sent Headers 
Accept: */* 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Accept-Language: en 

任何人都知道,如果我失去了一些東西?

在此先感謝您的幫助

達尼洛

回答

2

碼頭8.x的支持Java EE 6和Jetty 7.x中只支持Java EE 5 我從你的第一個代碼片斷看你用「 @Produces「來自Java EE 6的註釋。它一定是問題所在。

要解決:

  1. 確保您使用的GAE SDK與碼頭8.x的捆綁,支持批註僅
  2. 使用Java EE 5的設備 - 或 - 。

[編輯]

讓服務知道你需要消耗字符串參數。嘗試使用@Consumes運行註釋:

@POST 
@Path("/add") 
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
@Consumes("application/x-www-form-urlencoded") // to consume String parameters 
public Notification addUser(@FormParam("nickname") String nickname) {   
    ...... 
} 

下一個,如果你需要訪問服務:

URL url = new URL("http://[HOST]:[PORT]/[CONTEXT]/?nickname=prova"); // Your parameter 
HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
conn.setDoOutput(true); 
conn.setDoInput(true); 
conn.setRequestMethod("POST"); 
conn.connect();    

// Get the response 
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
String line; 
while ((line = rd.readLine()) != null) { 
    System.out.println(line); // Your service's response 
} 
rd.close(); 
conn.disconnect() 

希望這有助於。

+0

嗨Surlac,我試着用@Consumes(「text/plain」)和@Consumes(「application/x-www-form-urlencoded」)註釋說,但它仍然不起作用。在第一種情況下,我從GAE獲得「不支持的媒體類型」。第二種情況我得到空參數。任何線索我怎麼能做到這一點? – ddelizia

+2

嘗試在POST方法簽名中使用@FormParam,正如我在答案中所述。 – surlac

+0

此解決方案的工作表示感謝!!達尼洛 – ddelizia