Spring を使用して、resolveException メソッドでアプリケーションの予期しない例外をキャッチする SimpleMappingExceptionResolver を用意しました。このメソッドでは、エラー メッセージ テキストを HTTP クライアントに返す ModelAndView を返します。コードは次のとおりです。
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;
}
そのため、応答テキストがメッセージ (JSON) である HTTP ステータス コード 200 で応答が返されます。残念ながら、クライアントは 200 コードのために有効な応答であると考え、そのように処理しようとします。次のようにHTTPステータスコードを500に設定してみました:
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Server Error");
直前に
return mav;
声明。残念ながら、これは JSON メッセージではなく、内部エラーを示す HTML ページを返します。JSON メッセージを返し、サーバー エラー (または何らかのエラー) をクライアントに示すにはどうすればよいですか? 具体的には、AJAX 呼び出しでクライアントのエラー関数が呼び出され、メッセージ データがクライアントに送り返されることを期待しています。参考までに、クライアント側で jQuery を使用しています。