Ответ 1
Просто комментируйте метод с помощью @ModelAttribute
Ниже будет добавлен экземпляр Foo в модель под названием "foo"
@ModelAttribute("foo")
public Foo foo() {
return new Foo();
}
См. документацию @ModelAttribute
У меня есть некоторые общие компоненты, которые всегда присутствуют на каждой странице, обслуживаемой заданным классом контроллера.
В начале каждого метода @RequestMapping я заполняю модель этими общими компонентами.
Есть ли способ определить метод, который должен быть вызван до каждого из методов контроллера, чтобы я мог получить всю эту копию/пасту в одном месте?
Просто комментируйте метод с помощью @ModelAttribute
Ниже будет добавлен экземпляр Foo в модель под названием "foo"
@ModelAttribute("foo")
public Foo foo() {
return new Foo();
}
См. документацию @ModelAttribute
Перехватчик - это решение. Он имеет методы preHandler и postHandler, которые будут вызываться до и после каждого запроса соответственно. Вы можете подключиться к каждому объекту HTTPServletRequest, а также пропустить несколько, выкапывая его.
Вот пример кода:
@Component
public class AuthCodeInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
// set few parameters to handle ajax request from different host
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
response.addHeader("Access-Control-Max-Age", "1000");
response.addHeader("Access-Control-Allow-Headers", "Content-Type");
response.addHeader("Cache-Control", "private");
String reqUri = request.getRequestURI();
String serviceName = reqUri.substring(reqUri.lastIndexOf("/") + 1,
reqUri.length());
if (serviceName.equals("SOMETHING")) {
}
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
super.postHandle(request, response, handler, modelAndView);
}
}
Все методы, имеющие аннотацию @ModelAttribute, вызывается перед конкретным обработчиком, а возвращаемые значения добавляются в экземпляр модели. Затем вы можете использовать эти атрибуты в своих представлениях и в качестве параметров обработчика.
Я нашел этот блог очень полезен.
Да, вы можете использовать interceptor. Вы можете определить их <mvc:interceptors>
Другой вариант - использовать s Filter
, но вы не сможете вставить spring beans в него.