2011-06-25 211 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