Я реализую приложение 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, чтобы я мог использовать методы установки для установки значений из шрифта.