Только не обрабатывайте исключения таким образом в вашем контроллере.Создайте надлежащий распознаватель исключений с поддержкой ajax, тогда ваши методы контроллера будут однорядными.Я подклассировал AbstractHandlerExceptionResolver, делая в основном это:
@Override
public ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object o, Exception exception) {
int code = getResponseCode(exception);
applyStatusCodeIfPossible(request, response, code);
ExceptionInfo info = createErrorInfo(exception);
if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
return new ModelAndView(jsonView, MODEL_KEY, info);
}
else if ((code == 403 || code == 401) && SecurityContextHolder.getContext().getAuthentication().getAuthorities().contains(ANONYMOUS) == false) {
return new ModelAndView(LOGIN_REDIRECT);
}
else {
return new ModelAndView(getViewName(code), MODEL_KEY, info);
}
}
, после этого вам нужно только
@RequestMapping(value = "/verify", method = {RequestMethod.GET}, headers = "x-requested-with=XMLHttpRequest")
@ResponseBody public userTO verifyForXHR(@RequestParam String code) {
return new SomeService().verifyEmail(code);
}
@RequestMapping(value = "/verify", method = {RequestMethod.GET})
public ModelAndView verify(@RequestParam String code) {
return new ModelAndView("somegoodpage", "user", new SomeService().verifyEmail(code));
}