Служба Java Vert.x, возвращающая ошибку 500 от клиента Spring - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть клиент 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.

Что я делаю не так?Дайте мне знать, если вам нужна дополнительная информация.

...