Я работаю над обработкой исключений с помощью Spring MVC. Я использую @ControllerAdvice и @ExceptionHandler. Чтобы вернуть JSON, я пробовал оба случая: @ResponseBody и ResponseEntity.@ExceptionHandler ответ не работает в Tomcat
Вот мой контроллер:
@ControllerAdvice
public class GlobalExceptionController {
@ExceptionHandler(CustomGenericException.class)
@ResponseBody
public ErrorResource handleCustomException(CustomGenericException ex) {
ErrorResource errorResource=new ErrorResource("Example 1");
errorResource.error=ex.getErrCode();
return errorResource;
}
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResource> handleAllException(Exception ex) {
ErrorResource errorResource=new ErrorResource("Example 2");
errorResource.error=ex.getMessage();
return new ResponseEntity<ErrorResource>(errorResource,HttpStatus.NOT_FOUND);
}
}
class ErrorResource {
public String error;
public ErrorResource(String a){error=a;}
}
Я использую плагин для 7 кот Maven для запуска и отладки приложений, поэтому, когда я отладки я могу видеть, что @ExceptionHandler стреляет и осуществления возврата заявление. Но вместо того, чтобы получать JSON, что я получаю это HTTP 500 ошибка:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is com.mkyong.web.exception.CustomGenericException
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:979)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
Если я возвращаю представление или ModelView работает, но всякий раз, когда я пытаюсь вернуть ResponseBody или ResponseEntity, я до сих пор получив ту же ошибку.
Наконец, если вместо того, чтобы использовать кота, я использую SpringBoot, чтобы запустить приложение, я не получаю сообщение об ошибке, и я ответ, как я должен получить:
{"error":"E888"}
Почему не работает с Кот?
Спасибо.
Поскольку поведение полностью находится внутри сервлета, а не проблема Tomcat на всех – Raedwald