Сложный запрос в Джерси вызов REST - PullRequest
0 голосов
/ 10 мая 2019

Я использую com.sun.jersey.api.* для вызова службы REST, я не могу использовать другие библиотеки и мне нужно сделать немного более сложный запрос, такой как

"customer" : { 
    "name": "Smith", 
    "documents" : 
    [{"id" : "100", "content" : "lorem"}, 
    {"id" : "101", "content" : "ipsum"}] 
}

Вот код, который я пробовал до сих пор, просто запросить Customer::name и ... он не работает.

 Client client = Client.create();
 WebResource resource = client.resource(URL);
 String response = resource.queryParam("customer.name", "Smith")
                   .accept(MediaType.APPLICATION_FORM_URLENCODED)
                   .post(String.class);

Под "неудачей" я имею в виду, я не получаю null на стороне сервера вместо "Смит".

Редактировать

Ну, я сделал очевидную ошибку, мне нужно опубликовать тело, а не запрос. Тем не менее ...

 String body =  "{\"customer\": {\"name\" : \"Smith\"}}";
 String s = resource
             .accept(MediaType.APPLICATION_FORM_URLENCODED)
              .post(String.class, body);
 System.out.println(body);          

Это печатает

{"customer": {"name": "Smith"}}

И входящий запрос к серверу null.

Пытался использовать тот же JSON, что и body в Postman - это сработало.

1 Ответ

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

У меня есть пример кода для запроса Post. Если JSON, который вы упомянули, это то, что вы хотите получить на стороне сервера, отправьте JSON в теле сообщения, а не в качестве параметра запроса. Если это параметр запроса, топроверьте, ожидает ли ваш сервер того же ключевого параметра, то есть customer.name

Пример кода для Post с данными JSON в теле

     public static void main(String[] args) {

            try {

                Client client = Client.create();

                WebResource webResource = client
                   .resource("http://localhost:8080/RESTfulExample/rest/foo");

                String input = "{
    \"customer\": {
        \"name\": \"Smith\",
        \"documents\": [{
                \"id\": \"100\",
                \"content\": \"lorem\"
            },
            {
                \"id\": \"101\",
                \"content\": \"ipsum\"
            }
        ]
    }
}";

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

              } catch (Exception e) {

                e.printStackTrace();

              }

            }

Вот справочная ссылка для вашей помощи https://www.mkyong.com/webservices/jax-rs/restful-java-client-with-jersey-client/

После редактирования установить webResource.type ("application / json")

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