Java Vert.x服务从Spring客户端返回500错误

时间:2019-02-15 15:05:52

标签: java rest resttemplate vert.x http-delete

我有一个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 service控制台中收到的异常错误消息的开头:

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而不是使用我的客户端,那么该请求可以正常进行。我没有尝试使用cURLing,但是目前,如果它可以在Advanced REST Client中使用,我相信我也可以使用cURL。我只需要我的客户使用RestTemplate正确拨打电话即可。

我在做什么错?让我知道是否需要更多信息。

0 个答案:

没有答案