У меня есть клиент Spring, и с помощью RestTemplate
я пытаюсь передать данные в конечную точку созданной мной службы Vert.x.Однако, когда я передаю эти данные, ожидаемый ответ не происходит, и я получаю ошибки.
Метод контроллера для моего клиентского приложения Spring выглядит следующим образом: строка locations
равна {"locations":[15562,15563,15564]}
:
@RequestMapping(value = "/api/locations", method = RequestMethod.DELETE)
@ResponseBody
public String deleteWhLocations(@RequestBody String locations) {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set("Content-Type", "application/json");
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> httpEntity = new HttpEntity<>(locations, httpHeaders);
ResponseEntity responseEntity = restTemplate.exchange("http://my-website.services.com/my-endpoint/delete", httpMethod, httpEntity, String.class);
return locations;
}
В моей статье Vert.x моя конечная точка маршрутизатора выглядит следующим образом:
router.route().handler(BodyHandler.create());
router.route(HttpMethod.DELETE, "/my-endpoint/delete")
.blockingHandler(routingContext -> {
HttpServerResponse response = routingContext.response();
this.setHttpServerResponse(response);
JsonObject requestBody = routingContext.getBodyAsJson();
response.write(deleteLocationsService.deleteLocations(requestBody).encode());
routingContext.response().end();
});
Вот начало сообщения об ошибке исключения, которое я получаю в консоли службы mer:
io.vertx.core.json.DecodeException: Failed to decode:No content to map due to end-of-input
at [Source: (io.netty.buffer.ByteBufInputStream); line: 1, column: 0]
at io.vertx.core.json.Json.decodeValue(Json.java:168)
at io.vertx.core.json.JsonObject.fromBuffer(JsonObject.java:952)
at io.vertx.core.json.JsonObject.<init>(JsonObject.java:72)
at io.vertx.ext.web.impl.RoutingContextImpl.getBodyAsJson(RoutingContextImpl.java:257)
Здесь происходит несколько странных вещей.
Во-первых, я использую практически идентичный код в другом методе, но вместо DELETE
я использую POST
запрос, и это прекрасно работает.
Во-вторых, если я делаю тот же самый точный запрос DELETE
с той же самой точной строкой, но вместо того, чтобы использовать мой клиент, я использую Advanced REST Client, запрос проходит нормально,Я не пробовал оборачивать его, но на данный момент, если он работает в Advanced REST Client, я уверен, что смогу обернуть и его.Мне просто нужен мой клиент, чтобы правильно сделать этот вызов, используя RestTemplate
.
Что я делаю не так?Дайте мне знать, если вам нужна дополнительная информация.