java - 如何从 JAX-RS javax.ws.rs.core.Response 获取原始请求的 URI

标签 java jersey jersey-2.0 jersey-client

我正在尝试为 JAX-RS 编写一个自定义 ExceptionMapper 类。我想以某种方式从 JAX-RS javax.ws.rs.core.Response 对象读取原始请求的 URI。

当我在 Debug模式下使用 IntelliJ IDEA 检查响应对象时,我可以在以下路径下看到此信息:response > context > returnedUri where
上下文的类型是 org.glassfish.jersy.client.ClientResponse 。这个类有一个 resolvedUri 变量,它保存我需要的信息。

我可以通过某种方式获取此信息吗?如何编写我的 getRequestUri(response) 方法?

public class MyExceptionMapper implements ExceptionMapper<WebApplicationException> {

    @Override
    public Response toResponse(WebApplicationException error) {

        Response response = error.getResponse();
        ErrorResponse errorResponse = ErrorResponseBuilder
                .builder()
                .httpStatus(getDefaultStatusCodeIfNull(response))
                .errorMessage(getCustomErrorMessage(response))
                .requestedUri(getRequestedUri(response)) <--------- HOW TO READ IT?
                .build();

        return Response
                .status(errorResponse.getHttpStatus())
                .type(ExtendedMediaType.APPLICATION_JSON)
                .entity(errorResponse)
                .build();
    }
}

最佳答案

使用

@Context private HttpServletRequest servletRequest;

并使用HttpServletRequest.getRequestURI()

public class MyExceptionMapper implements 
     ExceptionMapper<WebApplicationException> {

    @Context
    private HttpServletRequest servletRequest;

    @Override
    public Response toResponse(WebApplicationException error) {

        Response response = error.getResponse();
        ErrorResponse errorResponse = ErrorResponseBuilder
                .builder()
                .httpStatus(getDefaultStatusCodeIfNull(response))
                .errorMessage(getCustomErrorMessage(response))
                .requestedUri(servletRequest.getRequestURI())
                .build();

        return Response
               .status(errorResponse.getHttpStatus())
               .type(ExtendedMediaType.APPLICATION_JSON)
               .entity(errorResponse)
               .build();
    }
}

关于java - 如何从 JAX-RS javax.ws.rs.core.Response 获取原始请求的 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46444770/

相关文章:

java - 使用 jersey/apache REST 客户端解析多行、多列文本响应

jersey - 在 Jersey 中删除添加的提供程序

java - HK2 IterableProvider 命名方法找不到实现

java - Jersey - 将 UriInfo 作为类实例变量注入(inject)和将其作为方法参数注入(inject)有什么区别?

java - 如何将整数添加到数组中的整数

java - IntelliJ 实时模板 : modified setters template

java - 即时生成 PDF 文件

java - Springboot -> Springboot 2 : 2 Spring WebApplicationInitializers detected on classpath

java - 独立 JAR 的行为与从 IDE 中启动时的行为不同

java - Jersey 2.x(非 Maven)在 Tomcat 服务器上运行时给出 404 错误