У меня есть обработчик исключений, подобный этому, который создаст объект ошибки json, который будет использоваться javascript в представлении.Spring @ExceptionHandler - применяется к json, производящему только @RequestMapping
@ControllerAdvice
public class ExceptionHandlerController {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public final JsonResponse<Void> handleJsonException(
final Exception e,
final HttpServletRequest request,
final HttpServletResponse response) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return new ErrorJsonResponse(e);
}
}
Я не хочу, чтобы этот метод выполнялся для регулярных запросов обратной передачи (не json). Поэтому я хотел бы, чтобы эти виды исключений обрабатывались WEB.XML настроенными страницами ошибок.
<error-page>
<error-code>500</error-code>
<location>/500</location>
</error-page>
В моих методах @RequestMapping, которые возвращают json, я явно устанавливаю значение generate.
@RequestMapping(value = "/dosomething",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
Как я могу сказать весне использовать конкретный обработчик исключений на основе типа содержимого контента?
Как я помню Весна '@ ControllerAdvice' не обрабатывает такие ошибки HTTP, как 400, 401 и т. Д. У меня есть эта проблема один раз, но я смог перевернуть на основе шаблона URL (каждый запрос JSON был вызван в контекст '/ api'). Вы можете попытаться перенаправить местоположение в web.xml на некоторый '@ Controller' и попытаться разобрать информацию о запросе, после этого определите конкретное исключение, которое будет ловить на' @ ControllerAdvice' –
ExceptionHandler обрабатывает все исключения, которые бросают контроллер. Таким образом, единственный способ, по которому я вижу, - переместить страницу ошибки внутри вашего приложения и выбрать, какая страница будет возвращена внутри метода ExceptionHandler. Для этой цели вы можете использовать HttpServletRequest. – mvb13