title: How can I return an error message and HTTP status code that calls jQuery AJAX error function?
body: <p>Using Spring, I have a SimpleMappingExceptionResolver that catches any unexpected exceptions in my application in the resolveException method. In the method, I return a ModelAndView that gives error message text back to the HTTP client. Here's the code:</p>
  
  <pre><code>public class UnExpectedExceptionResolver extends SimpleMappingExceptionResolver {
  
  private Log logger = LogFactory.getLog(this.getClass().getName());
  private ResourceBundleMessageSource messageSource;
  
  @Override
  public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) {
  
      // let the end user know that an error occurred
      Locale locale = RequestContextUtils.getLocale(request);
      String messageText = messageSource.getMessage("systemError", null, locale);
      Message message = new Message(messageText, MessageType.ERROR);
      ModelAndView mav = new ModelAndView();
      mav.setView(new MappingJacksonJsonView());
      mav.addObject("message", message);
      return mav;
  }
  </code></pre>
  
  <p>As such, the response is returned with a HTTP status code of 200 with response text being the message (JSON). Unfortunately, the client thinks it's a valid response due to the 200 code and tries to process it as such. I tried setting the HTTP status code to 500 as follows:</p>
  
  <pre><code> response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Server Error");
  </code></pre>
  
  <p>right before the </p>
  
  <pre><code> return mav;
  </code></pre>
  
  <p>statement. Unfortunately, this returns a HTML page indicating a internal error instead of my JSON message. How can I return the JSON message and still indicate a server error (or some type of error) to the client? Specifically, I expect the client's error function in the AJAX call to be invoked and still have the message data sent back to the client. FYI - I'm using jQuery on the client side.</p>