我在Spring Boot REST控制器上遇到问题-我试图使它在同一端点上同时服务GET和HEAD方法(理论上应该如此-假设使方法对GET进行响应会自动启用HEAD,好)。
问题是我的GET方法返回带有主体的响应-HEAD绝对不应该这样做。因此,当我尝试HEAD进入端点时,Spring出现打ic,而我全都不知道为什么。
我的控制器方法:
@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错误的请求,一切都很好。唯一的问题是GET返回正文而HEAD不应该返回的情况。
编辑:
事实证明,邮递员是问题所在-它没有正确解析响应。安装Insomnia并检查端点证明代码可以。
答案 0 :(得分:1)
启用日志记录以显示映射。 启用我的功能后,我会看到以下提示;
要启用日志记录,请将logging.level.org.springframework.web=TRACE
添加到您的application.properties
我的宁静终点。
@RestController
@RequestMapping("/user")
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@RequestMapping(value = "/{userId}", method = {RequestMethod.GET, RequestMethod.HEAD})
public ResponseEntity<User> user(@PathVariable("userId") String userId) {
return ResponseEntity.ok(this.userService.getUser(userId));
}
}
请参阅下面的邮递员屏幕截图,其中显示了对相同的端点和相同的@PathVariable
进行GET或HEAD时的成功