我正在GAE上开发一个休息网络服务。我正在使用Jersey框架来实现这些服务。这是一个POST服务,我必须传递参数。我尝试使用2种类型的注释,但我无法获取参数:
@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":"prova@yahoo.it","telephone":"123"}
Sent Headers
Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept-Language: en
有人知道我错过了什么吗?
提前感谢您的帮助
Danilo的
答案 0 :(得分:2)
Jetty 8.x支持Java EE 6,Jetty 7.x仅支持Java EE 5。 我从你的第一个代码片段中看到你使用Java EE 6中的“@Produces”注释。它一定是问题所在。
修复:
[编辑]
让服务知道您需要使用String参数。尝试使用@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()
希望这有帮助。