При попытке отправить POST-запрос в HTTPCLIENT -JAVA, получаю 400 Bad Request - PullRequest
1 голос
/ 09 апреля 2019

Я пытаюсь отправить запрос, используя JAVA HTTPCLIENT, и при этом я получаю 404 Bad Request.

Я попытался написать код JAVA в Eclipse, получил 404 Bad Request и попытался отправить запрос через POSTMAN и получил HTTP Status 500

package com.apex.customer.service;

public class CustServicePostTest {

    public static void main(String[] args) throws ClientProtocolException, IOException {

        String url = "http://www.thomas-bayer.com/sqlrest/CUSTOMER/102";
        //create the http client
        HttpClient client = HttpClientBuilder.create().build();
        //create the post message
        HttpPost post = new HttpPost(url);

        List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
        urlParameters.add(new BasicNameValuePair("ID", "102"));
        urlParameters.add(new BasicNameValuePair("FIRSTNAME", "Apex"));
        urlParameters.add(new BasicNameValuePair("LASTNAME", "Consultancy"));
        urlParameters.add(new BasicNameValuePair("STREET", "Shell Blvd"));
        urlParameters.add(new BasicNameValuePair("CITY", "Fremont"));

        post.setEntity(new UrlEncodedFormEntity(urlParameters));

        HttpResponse response = client.execute(post);

        System.out.println(response.getStatusLine().getStatusCode());
        System.out.println("Parameters : " + urlParameters);
        System.out.println("Response Code: " + response);
        System.out.println(response.getStatusLine().getReasonPhrase());

    }

}

Я ищу 200 OK запроса.

1 Ответ

1 голос
/ 09 апреля 2019

Проблема здесь из-за нескольких ошибок:

  • Первая связана с форматом ввода.Код, который вы используете, пытается отобразить ключ и значения, но, как я мог видеть из этого руководства , он ожидает формат XML в виде простого текста в качестве ввода.
  • Вторая ошибкачто вы пытаетесь опубликовать поверх существующего идентификатора.В этом случае, чтобы создать ресурс, вы должны использовать http://www.thomas -bayer.com / sqlrest / CUSTOMER /

Так что в этом случае, чтобы заставить его работать, попробуйтечто-то вроде этого:

        String url = "http://www.thomas-bayer.com/sqlrest/CUSTOMER/";
        HttpClient client = HttpClientBuilder.create().build();
        HttpPost post = new HttpPost(url);

        String xml = "<resource>";
        xml += "<ID>102</ID>";
        xml += "<FIRSTNAME>Apex</FIRSTNAME>";
        xml += "<LASTNAME>Consultancy</LASTNAME>";
        xml += "<STREET>Shell Blvd</STREET>";
        xml += "<CITY>Fremont</CITY>";
        xml += "</resource>";

        post.setEntity(new StringEntity(xml));
        HttpResponse response = client.execute(post);

        System.out.println(response.getStatusLine().getStatusCode());
        System.out.println("Response Code: " + response);
        System.out.println(response.getStatusLine().getReasonPhrase());

Также очень полезно изучить другой способ тестирования с помощью таких инструментов, как curl утилита командной строки.Например, вы можете ПОСТАВИТЬ продукт, подобный этому:

curl -X POST  http://www.thomas-bayer.com/sqlrest/PRODUCT/ -d '<resource><ID>103</ID><NAME>X</NAME><PRICE>2.2</PRICE></resource>'

После того, как вы решите это, будет важно привыкнуть к HTTP-кодам .Например, ошибка 500 означает, что что-то не так на стороне сервера, в то время как 404 обычно означает, что вы попали в недопустимую конечную точку (она не существует).

Наконец, я не буду обсуждать, почему вы используете этоПроект для отправки HTTP-запросов на сервер - но имейте в виду, что это не очень распространенный способ.В настоящее время REST с JSON будет гораздо интереснее и приятнее :) Если вам интересно, посмотрите Spring Boot REST

...