将http 500错误重定向到400

时间:2011-07-18 15:58:53

标签: html jsf-2 jaxb

当我的服务器收到不完整的xml时,由于500 Internal Server Error的默认处理,它会返回java.lang.IllegalArgumentException。我可以覆盖返回的html页面,但我还需要覆盖错误代码并使其400遵循我们记录的规范。有没有办法覆盖JSF-2.0中的错误代码?我们正在使用JAXB进行xml处理。

2 个答案:

答案 0 :(得分:1)

我最终使用了像这样的ExceptionMapper:

@Provider
public class ClassCastExceptionMapper implements ExceptionMapper<java.lang.ClassCastException> {

    @Override
    public Response toResponse(java.lang.ClassCastException arg0) {
        return Response.status(Response.Status.BAD_REQUEST).build();
    }
}

答案 1 :(得分:0)

取决于它被抛出的位置以及它是否包含在另一个例外中。根据目前提供的信息,很难给出一个完美的答案。

但是到目前为止,要使用JSF2发送具有正确状态的响应错误,请使用ExternalContext#responseSendError()。 E.g。

try {
    // ... ???
} catch (IllegalArgumentException e) {
    externalContext.responseSendError(400, e.getMessage());
    e.printStackTrace(); // Or use logger.
}

或等同于servlet filter,请使用HttpServletResponse#sendError()

try {
    // ... ???
} catch (IllegalArgumentException e) {
    response.sendError(400, e.getMessage());
    e.printStackTrace(); // Or use logger.
}