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