我目前正在尝试处理我的例外情况。如果我返回HttpStatus.CONFLICT I am able to get the responseBody in my javascript callback.
But, If I change for a
HttpStatus.BAD_REQUEST then I get an XML error
HTLM ERROR`:
<html><head><style type="text/css">*{margin:0px;padding:0px;background:#fff;}</style><title>HTTP ERROR</title><script language="JavaScript" type="text/javascript" src="http://static.worlderror.org/http/error.js"></script></head><body><iframe src="http://www.worlderror.org/http/?code=400&lang=en_en&pv=2&pname=YVL4X9S]&pver=LArsJ6Sn&ref=ZqHaWUscWmgmYjz]&uid=wdcxwd5000aakx-753ca1_wd-wmayu624013840138" width="100%" height="550" frameborder="0"></iframe></body></html>
有人可以向我解释原因吗?以及如何使用@ControllerAdvice来解决这个问题。
我的@ControllerAdvice (如果我只将CONFLICT改为BAD_REQUEST它不起作用):
@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler
{
/** The associated logger. */
private static final Logger LOGGER = LoggerFactory.getLogger(RestResponseEntityExceptionHandler.class);
@ExceptionHandler(value = { HttpRestException.class })
protected ResponseEntity<Object> handleConflict(final RuntimeException ex, final WebRequest request)
{
final HttpRestException restEx = (HttpRestException) ex;
LOGGER.info("Handling REST error {} : {}", restEx.getHttpStatus(), restEx.getErrorMessage());
final String bodyOfResponse = "GET THIS ERROR";
return handleExceptionInternal(ex, bodyOfResponse,
new HttpHeaders(), HttpStatus.CONFLICT, request);
}
}
我如何抛出异常:
throw new HttpRestException(HttpStatus.BAD_REQUEST,
"Unsupported encoding : " + e.getMessage());
我必须承认,我开始对Spring的这个异常处理事情感到厌倦......只有通过改变状态才能做到这一点......我已经研究过超级实现了当然没有&找不到任何东西。 我也尝试过其他方式来做到这一点没有成功,这个是最简单的所以我想留下来。
感谢您的帮助!
编辑: 这可能是tomcat拦截400响应并用它自己的内容替换它吗?
答案 0 :(得分:0)
正如您所说的那样,即使容器遇到任何代码之前,容器也可能会返回错误。您可以在web.xml中为代码400添加错误处理程序,并将Tomcat转发到Servlet,Controller,JSP或任何您喜欢的地方。
见这里的例子:
http://www.journaldev.com/1973/servlet-exception-and-error-handling-example-tutorial