Spring ResponseEntityExceptionHandler不适用于https.bad_request

时间:2014-10-31 16:22:21

标签: java spring rest

我目前正在尝试处理我的例外情况。如果我返回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响应并用它自己的内容替换它吗?

1 个答案:

答案 0 :(得分:0)

正如您所说的那样,即使容器遇到任何代码之前,容器也可能会返回错误。您可以在web.xml中为代码400添加错误处理程序,并将Tomcat转发到Servlet,Controller,JSP或任何您喜欢的地方。

见这里的例子:

http://www.journaldev.com/1973/servlet-exception-and-error-handling-example-tutorial