我有一个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
正确拨打电话即可。
我在做什么错?让我知道是否需要更多信息。