1) Проверить вручную
Вы можете ввести HttpServletRequest и проверить заголовки.
@RestController
public class HomeController {
public ResponseEntity<String> test(HttpServletRequest request){
if(request.getHeader("apiKeyHeader") == null){
return new ResponseEntity<String>(HttpStatus.BAD_REQUEST);
}
return new ResponseEntity<String>(HttpStatus.OK);
}
}
2) Вставить заголовок
@RequestMapping(value = "/test", method = RequestMethod.POST)
public ResponseEntity<String> test(@RequestHeader(value="myheader") String myheader){
return new ResponseEntity<String>(HttpStatus.OK);
}
Это вернет:
{
"timestamp": 1469805110889,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.web.bind.ServletRequestBindingException",
"message": "Missing request header 'myheader' for method parameter of type String",
"path": "/test"
}
если заголовок отсутствует.
3) Использовать фильтр
Вы можете автоматизировать проверку с помощью некоторого фильтра, если хотите использовать его для нескольких методов. В вашем пользовательском фильтре просто получите заголовок (например, в методе 1), и если заголовок отсутствует, просто ответьте 400 или чем хотите. Для меня это имеет смысл, когда вы не используете значение заголовка в методе контроллера и вам нужно только проверить его наличие.
@Bean
public FilterRegistrationBean someFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(apiHeaderFilter());
registration.addUrlPatterns("/example/*");
registration.setName("apiHeaderFilter");
registration.setOrder(1);
return registration;
}
@Bean(name = "ApiHeaderFilter")
public Filter apiHeaderFilter() {
return new ApiHeaderFilter();
}
Пропустить запрос
Если вы используете атрибут заголовков в @RequestMapping
@RequestMapping(value = "/test", method = RequestMethod.POST,
headers = {"content-type=application/json"})
это приведет к 404, если нет другого обработчика для обработки запроса.
person
Evgeni Dimitrov
schedule
29.07.2016
@Validated
на контроллере. - person Sarvesh Dubey   schedule 25.04.2018@PathVariable
,@RequestHeader
и@RequestParam
работают, только если класс помечен@Validated
. На всякий случай, если кто-то задается вопросом, почему@Pattern
работает для ОП... - person oberlies   schedule 26.02.2019