Java拦截器来处理RESTAPI响应代码

Java拦截器来处理RESTAPI响应代码,java,rest,http,interceptor,Java,Rest,Http,Interceptor,我需要截取应用程序的RESTAPI响应,并对其进行处理。实现这一点的一个非常明显的方法是在方法级别定义注释和拦截器(以便它可以应用于RESTAPI方法)。但是,我找不到一种方法来提取/截取API响应的响应代码。我对JavaEE世界非常陌生,所以这里可能遗漏了一些东西,但在互联网搜索中也没有找到任何东西。我们的应用程序基于带有CXF的标准JavaEE 我看到了一些类似于以下代码的示例,但不确定如何从中获得API响应。任何帮助都将不胜感激 @AroundInvoke public Object ar

我需要截取应用程序的RESTAPI响应,并对其进行处理。实现这一点的一个非常明显的方法是在方法级别定义注释和拦截器(以便它可以应用于RESTAPI方法)。但是,我找不到一种方法来提取/截取API响应的响应代码。我对JavaEE世界非常陌生,所以这里可能遗漏了一些东西,但在互联网搜索中也没有找到任何东西。我们的应用程序基于带有CXF的标准JavaEE

我看到了一些类似于以下代码的示例,但不确定如何从中获得API响应。任何帮助都将不胜感激

@AroundInvoke
public Object around(InvocationContext context) throws Exception {......

假设您使用的是标准JEE解决方案


对象结果=ctx.procedure()
是您的结果。

假设您使用的是标准JEE解决方案,来自


对象结果=ctx.procedure()是您的结果。

您好,您没有提到什么技术堆栈。如果您需要客户端的一些东西,您可以使用Spring和Spring的ClientHttpRequestInterceptor

@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
    ClientHttpResponse response = execution.execute(request, body);
    /**
     * response.getStatusCode();
     */
    return response;
}

嗨,你没提到什么技术堆栈。如果您需要客户端的一些东西,您可以使用Spring和Spring的ClientHttpRequestInterceptor

@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
    ClientHttpResponse response = execution.execute(request, body);
    /**
     * response.getStatusCode();
     */
    return response;
}
JAX-RS服务器过滤器 使用JAX-RS API 2.0中的

@Provider
公共类CustomResponseFilter实现ContainerResponseFilter{
@凌驾
公共无效筛选器(ContainerRequestContext requestContext,
ContainerResponseContext(responseContext)引发IOException{
//截取HTTP响应并获取状态代码
int status=responseContext.getStatus()
}
}
JAX-RS 2.0 API还提供了拦截请求的功能:

@Provider
公共类CustomRequestFilter实现ContainerRequestFilter{
@凌驾
公共无效筛选器(ContainerRequestContext requestContext)引发IOException{
//拦截HTTP请求
}
}
要将筛选器绑定到资源类和/或方法,请使用

在Apache CXF中注册服务器筛选器 根据,过滤器必须注册在
cxf.xml
配置文件中。此文件必须位于应用程序的类路径中

下面是从中提取的示例,说明了注册筛选器时CXF配置文件的样子:


有关更多详细信息,请查看。

JAX-RS服务器过滤器 使用JAX-RS API 2.0中的

@Provider
公共类CustomResponseFilter实现ContainerResponseFilter{
@凌驾
公共无效筛选器(ContainerRequestContext requestContext,
ContainerResponseContext(responseContext)引发IOException{
//截取HTTP响应并获取状态代码
int status=responseContext.getStatus()
}
}
JAX-RS 2.0 API还提供了拦截请求的功能:

@Provider
公共类CustomRequestFilter实现ContainerRequestFilter{
@凌驾
公共无效筛选器(ContainerRequestContext requestContext)引发IOException{
//拦截HTTP请求
}
}
要将筛选器绑定到资源类和/或方法,请使用

在Apache CXF中注册服务器筛选器 根据,过滤器必须注册在
cxf.xml
配置文件中。此文件必须位于应用程序的类路径中

下面是从中提取的示例,说明了注册筛选器时CXF配置文件的样子:



有关更多详细信息,请查看。

尽管拦截器是处理应用程序服务的交叉关注点的一种很好的方法,但您在这里谈论的是web应用程序。您看到的不是拦截服务请求,而是拦截http请求

Web应用程序使用servlet规范,对于此类通用内容,您可以使用
@Webfilter
s。 这些WebFilter可以获取整个请求和响应,包括状态代码,因为它们在传输级别而不是应用程序级别上工作


请注意,servlet规范很挑剔:如果不复制请求和响应,就无法轻松读取它们,而且代码有点凌乱。用谷歌搜索一下(记录http请求,记录http响应),你应该能找到很多代码来创建一个过滤器

尽管拦截器是为应用程序服务提供交叉关注点的一种很好的方式,但这里您所说的是一个web应用程序。您看到的不是拦截服务请求,而是拦截http请求

Web应用程序使用servlet规范,对于此类通用内容,您可以使用
@Webfilter
s。 这些WebFilter可以获取整个请求和响应,包括状态代码,因为它们在传输级别而不是应用程序级别上工作


请注意,servlet规范很挑剔:如果不复制请求和响应,就无法轻松读取它们,而且代码有点凌乱。用谷歌搜索一下(记录http请求,记录http响应),你应该能找到很多代码来创建一个过滤器

是的,我认为只要“结果”具有所有必要的响应数据,这将起作用。我们将试用并确认。谢谢。@V_Singh看到你更新了这个问题,标准的cxf拦截器也会有选择。是的,我认为只要“result”有所有必要的响应数据,它就可以工作。我们将试用并确认。谢谢。@V_Singh看到你更新了这个问题,标准的cxf拦截器也会选择