使用Spring验证框架验证请求标头
问题内容:
是否可以将Spring验证框架与Spring MVC一起使用以验证HTTP请求标头的存在和值?
问题答案:
要检查请求标头的 存在 ,您不需要验证框架。默认情况下,请求标头参数是必需的,如果请求中缺少必需标头,Spring MVC会自动响应400 Bad
Request。
因此,以下代码自动检查标题“ Header-Name”的存在…
@PostMapping("/action")
public ResponseEntity<String> doAction(@RequestHeader("Header-Name") String headerValue) {
// ...
}
…并且如果标头是可选的,则注释将需要替换为:
@RequestHeader(name = "Header-Name", required = false)
要检查请求标头的 值 ,可以使用Spring验证框架。为此,您需要
- 添加
@Validated
到控制器类。在实现此功能之前,这是一种解决方法。 - 将JSR-303批注添加到请求标头参数,例如
@RequestHeader("Header-Name") @Pattern(regexp = "[A-Za-z]*") String headerValue
但是请注意,如果标头值无效,则结果为500。以了解在这种情况下如何也获得正确的状态代码(即400)。