Джерси: Как получить параметры POST на стороне сервера? - PullRequest
0 голосов
/ 09 мая 2019

Я пробовал @QueryParam, когда я передаю параметры по URL, а также @PathParam, после этого я просто пытаюсь вызвать по протоколу http.Это не работает.

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Path("/putOtdDebt")
public Response putOtdDebt(@HeaderParam("username") String username,                                 
                           @HeaderParam("password") String password) {

     System.out.println("username: " + username);
     System.out.println("password: " + password);
     return Response.status(201).entity("{\"testStr\": \"Call putOtdDebt\"}").build();
    }

, и я попытался позвонить так:

Client client = Client.create();

WebResource webResource = client
              .resource("http://localhost:8080/BgsRestService/rest/bgs/putOtdDebt");

String input = "{\"username\":\"testuser\",\"password\":\"testpassword\"}";

ClientResponse response = webResource.type("application/json")
               .post(ClientResponse.class, input);
if (response.getStatus() != 201) {
                throw new RuntimeException("Failed : HTTP error code : "
                     + response.getStatus());
            }

System.out.println("Output from Server .... \n");
String output = response.getEntity(String.class);
System.out.println(output);

В результате параметры равны нулю:

username: null
password: null

help me! how can i get post parameters?

1 Ответ

1 голос
/ 09 мая 2019

Вы передаете input строку как тело в POST вызове

String input = "{\"username\":\"testuser\",\"password\":\"testpassword\"}";

И в коде на стороне сервера вы используете @HeaderParam для получения значений из тела, которое является неправильным, @HeaderParam используются для получения значений заголовков

public @interface HeaderParam

Связывает значения (я) заголовка HTTP с параметром метода ресурса, классом ресурсаполе или свойство компонента класса ресурса.

Вы можете принять тело POST в виде строки, если вы хотите получить username и password, вам нужно проанализировать строку в JsonObject и получить значения

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Path("/putOtdDebt")
public Response putOtdDebt(String body) {

 System.out.println("body: " + body);
  }

Или вы также можете создать POJO с этими двумя свойствами и отобразить его напрямую

public class Pojo {

 private String username;
 private String password;
 //getters and setters
  }

Код сервера

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Path("/putOtdDebt")
public Response putOtdDebt(Pojo body) {

System.out.println("username: " + body.getUsername());
System.out.println("password: " + body.getPassword());
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...