java - 如何在通过 JAX-RS (Apache-CXF 实现)ExceptionMapper 准备的错误响应中保留请求 header

标签 java jax-rs cxf restful-architecture exceptionmapper

我正在使用 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/

相关文章:

java - 无法在 Selenium Java 中生成范围报告

java - jersey json 尝试解码到同一对象

java - Jersey 中过滤器的动态绑定(bind)不适用于子资源

java - CXF 冲突 xmlschema 和 xmlschema-core 依赖

java - 防止 JAXRSClientFactory 重用连接

java - QueryDSL 中的多列

java - 无法使用远程java应用程序进行调试

java - 使用 Spring Spring JPA 2.* 的 OUT 参数调用存储过程

java - 以编程方式为 JAX-RS 注册 POJO 支持或 JSON 提供程序

java - Apache CXF 拦截器配置