Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从JAX-RS javax.ws.RS.core.Response获取原始请求的URI_Java_Jersey_Jersey 2.0_Jersey Client - Fatal编程技术网

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

如何从JAX-RS javax.ws.RS.core.Response获取原始请求的URI,java,jersey,jersey-2.0,jersey-client,Java,Jersey,Jersey 2.0,Jersey Client,我正在尝试为JAX-RS编写一个自定义的异常映射类。我希望以某种方式从JAX-RSjavax.ws.RS.core.Response对象读取原始请求的URI 当我在调试模式下使用IntelliJ IDEA检查响应对象时,我可以在以下路径下看到此信息:response>context>resolvedUri where 上下文的类型是。这个类有一个resolvedUri变量,它保存我需要的信息 我能得到这个信息吗?如何编写我的getRequestUri(response)方法 public cla

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

当我在调试模式下使用IntelliJ IDEA检查响应对象时,我可以在以下路径下看到此信息:response>context>resolvedUri where
上下文的类型是。这个类有一个
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();
    }
}
公共类MyExceptionMapper实现ExceptionMapper{
@凌驾
对响应的公共响应(WebApplicationException错误){
Response=error.getResponse();
ErrorResponse ErrorResponse=ErrorResponseBuilder
.builder()
.httpStatus(getDefaultStatusCodeIfNull(响应))
.errorMessage(getCustomErrorMessage(响应))
.requestedUri(getRequestedUri(response))使用

@上下文 私有HttpServletRequest-servletRequest

并使用HttpServletRequest.getRequestURI()

公共类MyExceptionMapper实现
例外情况{
@上下文
私有HttpServletRequest-servletRequest;
@凌驾
对响应的公共响应(WebApplicationException错误){
Response=error.getResponse();
ErrorResponse ErrorResponse=ErrorResponseBuilder
.builder()
.httpStatus(getDefaultStatusCodeIfNull(响应))
.errorMessage(getCustomErrorMessage(响应))
.requestedUri(servletRequest.getRequestURI())
.build();
返回响应
.status(errorResponse.getHttpStatus())
.type(ExtendedMediaType.APPLICATION_JSON)
.实体(错误响应)
.build();
}
}
使用

@上下文 私有HttpServletRequest-servletRequest

并使用HttpServletRequest.getRequestURI()

公共类MyExceptionMapper实现
例外情况{
@上下文
私有HttpServletRequest-servletRequest;
@凌驾
对响应的公共响应(WebApplicationException错误){
Response=error.getResponse();
ErrorResponse ErrorResponse=ErrorResponseBuilder
.builder()
.httpStatus(getDefaultStatusCodeIfNull(响应))
.errorMessage(getCustomErrorMessage(响应))
.requestedUri(servletRequest.getRequestURI())
.build();
返回响应
.status(errorResponse.getHttpStatus())
.type(ExtendedMediaType.APPLICATION_JSON)
.实体(错误响应)
.build();
}
}

您是否尝试过
URI=response.getLocation();System.out.println(URI.toString());
?我尝试过。它返回null:(不确定,但作为Java,它返回位置URI,否则如果不存在则返回null。
getLocation()
在重定向302代码的情况下返回位置标题中的Uri例如,您是否尝试过
Uri Uri=response.getLocation();System.out.println(Uri.toString());
?我尝试过。它返回null:(不确定,但作为Java,它返回位置Uri,否则如果不存在则返回null。
getLocation()
在重定向302代码的情况下返回位置标头中的Uri,例如,这是一个完美的解决方案。工作方式类似于charm.Thx。唯一剩下的问题是与多线程环境有关。parelell请求如何调用相同的rest Uri(例如)处理不同的头?每个Parallel请求是否都有自己的MyExceptionMapper类实例和所属的请求对象?@上下文是请求范围,因此每个请求都有一个唯一的实例。这是一个完美的解决方案。效果很好。Thx。唯一剩下的问题是与多线程环境有关。Pareller如何处理处理对相同rest URI的equest调用(例如)不同的头?每个并行请求是否都有自己的MyExceptionMapper类实例和所属的请求对象?@上下文是请求范围,因此每个请求都有一个唯一的实例。
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();
    }
}