如何从JAX-RS javax.ws.RS.core.Response获取原始请求的URI
我正在尝试为JAX-RS编写一个自定义的如何从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-RSjavax.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();
}
}