我正在使用 apache CXF 实现 JAX-RS。我创建了一个 ExceptionMapper 来处理这样的错误请求:
public class ClientErrorExceptionMapper implements ExceptionMapper<ClientErrorException> {
@Override
public Response toResponse(final ClientErrorException exception) {
return Response.status(Response.Status.BAD_REQUEST).entity("Invalid request: Invalid URI.").build();
}
}
我不确定这在内部是如何工作的,但我认为如果用户发出无效请求,框架会抛出异常,并且该处理程序将准备一条要发回的错误消息。我的问题是我希望保留用户在请求中发送的一些自定义 header ,以便我将其与响应一起发送回来。但是使用这个异常映射器,我看不到任何获取原始请求 header 的选项。我可以在响应中设置任何新 header ,但我希望保留请求 header - 就像我在正常请求中所做的那样。 那么 JAX-RS 中有什么方法可以让我保留或有效地引用当前请求中的自定义 header 吗?
最佳答案
我们采取的是在请求到达时使用线程局部变量来保存RequestContext
,然后在ExceptionMapper
中我们可以获得请求的具体信息。
丑陋但有效。我认为我们在过滤器列表中有一个通用过滤器,可以在分派(dispatch)之前捕获所有请求。
关于java - 如何在通过 JAX-RS (Apache-CXF 实现)ExceptionMapper 准备的错误响应中保留请求 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33031143/