Параметры процесса HTTP-запроса POST в веб-службе REST (JERSEY) - PullRequest
1 голос
/ 25 июня 2011

Я разрабатываю веб-сервис отдыха на GAE. Я использую структуру Джерси для реализации услуг. Это 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);

    .......
}

@ 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

Кто-нибудь знает, если я что-то упустил?

Заранее спасибо за помощь

Данило

1 Ответ

2 голосов
/ 25 июня 2011

Jetty 8.x поддерживает Java EE 6, а Jetty 7.x поддерживает только Java EE 5. Из вашего первого фрагмента кода видно, что вы используете аннотацию «@Produces» из Java EE 6. Это должно быть проблемой.

Исправление:

  1. Убедитесь, что вы используете GAE SDK в комплекте с Jetty 8.x для поддержки аннотации -или-
  2. Используйте только средства Java EE 5.

[EDIT]

Сообщите службе, что вам необходимо использовать параметры String.Попробуйте использовать аннотацию @Consumes Runtime:

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...