Я пытаюсь настроить схему для единообразной обработки исключений в Spring. Поэтому мне нужен способ передачи контекстной информации в @ExceptionHandler
-аннотированный метод, например, рассмотрим следующее:
@ExceptionHandler(Exception.class)
public void handleException(Exception ex, HttpServletRequest request) {
// Need access to myContext from login()
}
@RequestMapping(value = "{version}/login", method = RequestMethod.POST)
public void login(HttpServletRequest request, @PathVariable String version, @RequestParam("userName") String userName, @RequestParam("password") String password, ModelMap model) throws Exception {
...
myContext = "Some contextual information"
...
i_will_always_throw_an_exception();
}
Поскольку Spring отвечает за преобразование сгенерированного исключения в вызов handleException()
, я испытываю затруднения, пытаясь найти способ передать myContext
обработчику. Одна мысль, которую я имею, создает подкласс HttpServletRequest. Если этот подход работает, у меня будет такой код:
@ExceptionHandler(Exception.class)
public void handleException(Exception ex, MyCustomHttpServletRequest request) {
// I now have access to the context via the following
String myContext = request.getContext();
}
@RequestMapping(value = "{version}/login", method = RequestMethod.POST)
public void login(MyCustomHttpServletRequest request, @PathVariable String version, @RequestParam("userName") String userName, @RequestParam("password") String password, ModelMap model) throws Exception {
...
myContext = "Some contextual information"
request.setContext(myContext);
...
i_will_always_throw_an_exception();
}
Но, если я буду следовать этому подходу, как мне правильно использовать мой собственный произвольный подкласс HttpServletRequest, чтобы эта работа работала?