gpt4 book ai didi

http - REST Web 服务 (JERSEY) 中 POST HTTP 请求的处理参数

转载 作者:可可西里 更新时间:2023-11-01 17:14:30 25 4
gpt4 key购买 nike

我正在 GAE 上开发一个休息网络服务。我正在使用 Jersey 框架来实现服务。这是一个 POST 服务,我还必须在其中传递参数。我尝试使用 2 种类型的注释,但无法获取参数:

@上下文

@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);

.......
}

@查询参数

@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

有人知道我是否遗漏了什么吗?

预先感谢您的帮助

达尼洛

最佳答案

Jetty 8.x 支持 Java EE 6,而 Jetty 7.x 仅支持 Java EE 5。我从您的第一个代码片段中看到您使用了 Java EE 6 中的“@Produces”注释。这一定是问题所在。

修复:

  1. 确保您使用的是与 Jetty 8.x 捆绑在一起的 GAE SDK 以支持注释 - 或 -
  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()

希望这对您有所帮助。

关于http - REST Web 服务 (JERSEY) 中 POST HTTP 请求的处理参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6478946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com