I'm working to handle exceptions with Spring MVC. I'm using @ControllerAdvice and @ExceptionHandler. In order to return a JSON I tried both cases: @ResponseBody and ResponseEntity.
Here is my Controller:
@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;}
}
I'm using the tomcat 7 plugin for maven to run and debug the app, so when I debug I can see that the @ExceptionHandler is firing and executing the return statement. But instead of receiving a JSON what I'm getting is an HTTP 500 error:
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)
If I return a view or a ModelView is working, but whenever I try to return a ResponseBody or ResponseEntity, I'm still getting the same error.
Finally, if instead of using tomcat, I use SpringBoot to run the app, I'm not getting the error and I'm response as I supposed to receive:
{"error":"E888"}
Why is not working with Tomcat?
Thanks.