【发布时间】:2016-10-02 06:19:12
【问题描述】:
我正在使用 Spring MVC 处理异常。我正在使用@ControllerAdvice 和@ExceptionHandler。为了返回 JSON,我尝试了两种情况:@ResponseBody 和 ResponseEntity。
这是我的控制器:
@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;}
}
我正在使用 maven 的 tomcat 7 插件来运行和调试应用程序,所以当我调试时,我可以看到 @ExceptionHandler 正在触发并执行 return 语句。但我得到的是 HTTP 500 错误,而不是接收 JSON:
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 时,我仍然会收到相同的错误。
最后,如果我不使用 tomcat,而是使用 SpringBoot 来运行应用程序,我没有收到错误消息,并且我得到了我应该收到的响应:
{"error":"E888"}
为什么不能使用 Tomcat?
谢谢。
【问题讨论】:
-
由于行为完全在 servlet 内,根本不是 Tomcat 问题
标签: java spring maven tomcat exception-handling