У меня есть класс @RestController
, который включает пару @RequestMapping
, каждый из которых имеет свой тип аргумента, отличный от @RequestBody
, и все эти классы запросов наследуют один и тот же абстрактный класс, например:
public class RequestA extends Request {
...
}
public class RequestB extends Request {
...
}
public abstract class Request {
private String myHeader;
}
И это мой контроллер:
@RestController
public class MyController {
@RequestMapping("A")
public Response requestA(@Valid @ResponseBody RequestA request) {
...
}
@RequestMapping("B")
public Response requestB(@Valid @ResponseBody RequestB request) {
...
}
}
Я хочу перехватить все эти запросы перед тем, как перейти к этим методам, и заполнить некоторые поля из абстрактного класса значениями из заголовков http-запросов. Я sh, чтобы избежать написания этого кода для каждого запроса, я sh должен иметь один код, который обрабатывает все запросы контроллера, во-вторых, мне нужно, чтобы этот код запускался до кода подтверждения запроса с момента проверки зависит от этих заполненных полей из абстрактного класса.
Я пытался использовать @ModelAttribute
, но безуспешно этот код не работает:
@ModelAttribute
@ResponseBody
private Request populate(
@RequestBody(required = false) Request request,
@RequestHeader(required = false, name = "My-Header") String myHeader) {
if (request != null) {
request.setMyHeader(myHeader);
}
}