Почему я получаю статус ответа 204 Нет содержимого на моем REST-сервере? - PullRequest
0 голосов
/ 19 марта 2019

Я новичок в REST API и работаю с серверами в целом, и я пытаюсь создать простое клиент-серверное приложение. Я использую Джерси.

Клиент отправляет некоторые данные на сервер, сервер получает данные и показывает их на желаемом URI и наоборот.

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

Я пробовал POST так:

    @POST
    @Path("/something")
    @Consumes("application/x-www-form-urlencoded")
    public void getSomething(){

    }

И мой код на стороне клиента выглядит примерно так:

Client client = Client.create();
MultivaluedMap formData = new MultivaluedMapImpl();
        formData.add("name1", "val1");
        formData.add("name2", "val2");

        WebResource resource = client.resource("http://localhost:8080/artifact/rest/something");

        ClientResponse response = resource.type("application/x-www-form-urlencoded").post(ClientResponse.class, formData);

        System.out.println(response);

Я пытаюсь отправить объект типа string или json на сервер, и он должен показать его в этом URL. Но я не могу этого сделать.

Буду признателен, если кто-нибудь поможет мне в этом.

Редактировать Буду также признателен, если кто-нибудь скажет мне, как отправить данные на сервер с таким кодом.

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Ваш getSomething ничего не возвращает.Это приводит к ответу 204 No Content: операция прошла успешно (2xx кода указывает на это), но возвращать нечего.

Если вы хотите что-то вернуть,изменить тип возвращаемого значения с void на Response.

@POST
@Path("/something")
@Consumes("application/x-www-form-urlencoded")
@Produces("text/plain")
public Response getSomething() {
  return Response.ok("Success!").build();
}

. Будет возвращен код состояния HTTP 200 OK с Success! в качествесодержимое тела ответа.

Но вы, вероятно, хотите каким-то образом использовать содержимое запроса.Посмотрите, как jax-rs извлекает параметры формы , как вы можете это сделать.

0 голосов
/ 19 марта 2019

Попробуйте использовать этот формат для серверной части джерси, хотя все, что вы используете, одинаково:

@POST
@Path("your path")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)

Для клиентской стороны попробуйте использовать это.

    CloseableHttpClient httpClient = HttpClientBuilder.create().build();
    HttpPost post = new HttpPost(url + "/rest/something");
    post.addHeader("Accept" , "application/json");
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("name1", "val1"));
    params.add(new BasicNameValuePair("name2", "val2"));
    post.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
    HttpResponse response = httpClient.execute(post);
    String out = EntityUtils.toString(response.getEntity());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...