在Spring中以相同方法处理HTTP HEAD和GET的问题

时间:2018-12-07 09:03:13

标签: spring rest spring-boot get

我在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并检查端点证明代码可以。

1 个答案:

答案 0 :(得分:1)

启用日志记录以显示映射。 启用我的功能后,我会看到以下提示;

enter image description here

要启用日志记录,请将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时的成功

通过响应正文获取请求: enter image description here

HEAD请求,没有响应主体: enter image description here