【发布时间】:2018-12-07 09:03:12
【问题描述】:
我的 Spring Boot REST 控制器有问题 - 我试图让它在同一个端点同时提供 GET 和 HEAD 方法(理论上应该 - 假设,使方法响应 GET 自动启用 HEAD 作为好)。
问题是我的 GET 方法返回带有正文的响应 - HEAD 绝不应该这样做。因此,当我尝试 HEAD 进入我的端点时,Spring 会打嗝,我完全不知道为什么。
我的控制器方法:
@RequestMapping(value = "/{ipAddress}", method = RequestMethod.GET)
public HttpEntity<ExitNode> getNode(@PathVariable("ipAddress") String ip) {
if (validateIp(ip)) {
if (!nodeCheckerService.checkNodeIp(ip)) {
return ResponseEntity.notFound().build();
} else {
return ResponseEntity.ok(nodeCheckerService.getNode(ip));
}
} else return ResponseEntity.badRequest().build();
}
当我使用格式错误的参数进入端点时,一切正常,我收到 400 Bad Request 并且一切正常。唯一的问题是 GET 返回正文而 HEAD 不应该返回的情况。
编辑:
原来 Postman 是问题所在 - 它没有正确解析响应。安装 Insomnia 并检查端点证明代码是可以的。
【问题讨论】:
-
为什么不能用映射头方法创建第二个端点?您将有两个类似的方法实现与另一个请求方法。
-
我一开始尝试这样做,但没有成功。结果是:
Resolved [IllegalStateException: Ambiguous handler methods mapped for '/192.42.116.20'我相信这是由于 HEAD 到启用 GET 的方法的隐式 Spring 映射。
标签: spring rest spring-boot get