Сбой запроса POST в Apache HTTP-клиенте - PullRequest
1 голос
/ 26 апреля 2020

Я реализую приложение java RMI, где мне нужно создать соединение от сервера RMI к клиенту REST. Я создал REST-клиент с использованием весенней загрузки.

Я сейчас реализую часть для установления sh соединения между сервером RMI и REST-клиентом.

Когда я пытаюсь отправить POST-запрос с использованием Apache HTTP-клиента. Я получаю сообщение об ошибке.

alarmServiceImpl. java

public void saveAlarm(Alarm alarm) {

      Alarm alarm1 = new Alarm();
//        alarm1.getFloorNum();
//        alarm1.getRoomNum();
//        alarm1.getSmokeLevel();
//        alarm1.getCo2level();

        try(CloseableHttpClient httpclient = HttpClients.createDefault()){
            HttpPost httpPost = new HttpPost("http://localhost:8080/addAlarm");
            httpPost.setHeader("Accept", "application/json");
            httpPost.setHeader("Content-type", "application/json");
            String json = "{\r\n" +
                    "  \"floorNum\": \"2\",\r\n" +
                    "  \"roomNum\": \"10\",\r\n" +
                    "  \"smokeLevel\": \"7\",\r\n" +
                    "  \"c02level\": \"5\",\r\n" +

                    "}";

            StringEntity stringEntity = new StringEntity(json);
            httpPost.setEntity(stringEntity);
            System.out.println("Executing request " + httpPost.getRequestLine());


            ResponseHandler < String > responseHandler = response -> {
                int status = response.getStatusLine().getStatusCode();
                if (status >= 200 && status < 300) {
                    HttpEntity entity = response.getEntity();
                    return entity != null ? EntityUtils.toString(entity) : null;
                } else {
                    throw new ClientProtocolException("Unexpected response status: " + status);
                }
            };

            String responseBody = httpclient.execute(httpPost, responseHandler);
            System.out.println("----------------------------------------");
            System.out.println(responseBody);

        } catch (IOException e) {
            e.printStackTrace();
        }



    }

Код ошибки

Executing request POST http://localhost:8080/addAlarm HTTP/1.1
org.apache.http.client.ClientProtocolException: Unexpected response status: 400
    at rmiServer.serviceImpl.AlarmServiceImpl.lambda$saveAlarm$0(AlarmServiceImpl.java:79)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:222)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:164)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:139)
    at rmiServer.serviceImpl.AlarmServiceImpl.saveAlarm(AlarmServiceImpl.java:83)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

Метод post выполняется в сервер RMI, который я не показал, так как это не влияет на эту ошибку. Другое решение, которое я ищу, когда метод POST работает правильно, я хочу иметь возможность использовать методы получения для передачи значений для переменных JSON, чтобы я мог использовать методы установки для установки значений из шрифта.

...