我正在尝试为 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/