如何在 ClientRequestFilter 中获取 MicroProfile REST Client 注释
how to get MicroProfile REST Client annotation in ClientRequestFilter
我的 RestClient 由自定义注释进行注释,我想在 ClientRequestFilter 中获取注释值。
这是我的 MicroProfile RestClient:
@Path("/greetings")
@RegisterRestClient
@MyAnnotation("myValue")
public interface MyRestClient{
@GET
public String hello();
}
我想在我的 ClientRequestFilter 中获取注释值:
public class MyFilter implements ClientRequestFilter {
@Override
public void filter(ClientRequestContext requestContext) {
// Here i want to get the MyAnnotation value. i.e "myValue"
}
}
我试图调用 requestContext.getClient().getAnnotations()
方法,但它不起作用,因为 requestContext.getClient()
是 org.jboss.resteasy.microprofile.client.impl.MpClient
的一个实例
有问题的实现是 RESTEasy。我想找到一种方法从 RESTEasy 经典实现和 RESTEasy 响应式实现中获取这些信息。
感谢您的帮助
这应该有效:
import org.jboss.resteasy.client.jaxrs.internal.ClientRequestContextImpl;
import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.client.ClientRequestFilter;
import javax.ws.rs.ext.Provider;
@Provider
public class MyFilter implements ClientRequestFilter {
@Override
public void filter(ClientRequestContext requestContext) {
Class<?> declaringClass = ((ClientRequestContextImpl) requestContext)
.getInvocation()
.getClientInvoker()
.getDeclaring();
MyAnnotation myAnnotation = declaringClass.getAnnotation(MyAnnotation.class);
System.out.println(myAnnotation.value());
}
}
顺便提一下,这确实是 RESTEasy 特有的。 class ClientRequestContextImpl
来自内部 RESTEasy 包,因此可能会有所变化。
这里是 MicroProfile REST Client specific way:
@Provider
public class MyFilter implements ClientRequestFilter {
public void filter(final ClientRequestContext clientRequestContext) {
final Method method = (Method) clientRequestContext
.getProperty("org.eclipse.microprofile.rest.client.invokedMethod");
Class<?> declaringClass = method.getDeclaringClass();
System.out.println(declaringClass);
MyAnnotation myAnnotation = declaringClass.getAnnotation(MyAnnotation.class);
System.out.println(myAnnotation.value());
}
}
它必须适用于所有实现,包括 RESTEasy(经典和反应式)或 Apache CXF。
我的 RestClient 由自定义注释进行注释,我想在 ClientRequestFilter 中获取注释值。
这是我的 MicroProfile RestClient:
@Path("/greetings")
@RegisterRestClient
@MyAnnotation("myValue")
public interface MyRestClient{
@GET
public String hello();
}
我想在我的 ClientRequestFilter 中获取注释值:
public class MyFilter implements ClientRequestFilter {
@Override
public void filter(ClientRequestContext requestContext) {
// Here i want to get the MyAnnotation value. i.e "myValue"
}
}
我试图调用 requestContext.getClient().getAnnotations()
方法,但它不起作用,因为 requestContext.getClient()
是 org.jboss.resteasy.microprofile.client.impl.MpClient
有问题的实现是 RESTEasy。我想找到一种方法从 RESTEasy 经典实现和 RESTEasy 响应式实现中获取这些信息。
感谢您的帮助
这应该有效:
import org.jboss.resteasy.client.jaxrs.internal.ClientRequestContextImpl;
import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.client.ClientRequestFilter;
import javax.ws.rs.ext.Provider;
@Provider
public class MyFilter implements ClientRequestFilter {
@Override
public void filter(ClientRequestContext requestContext) {
Class<?> declaringClass = ((ClientRequestContextImpl) requestContext)
.getInvocation()
.getClientInvoker()
.getDeclaring();
MyAnnotation myAnnotation = declaringClass.getAnnotation(MyAnnotation.class);
System.out.println(myAnnotation.value());
}
}
顺便提一下,这确实是 RESTEasy 特有的。 class ClientRequestContextImpl
来自内部 RESTEasy 包,因此可能会有所变化。
这里是 MicroProfile REST Client specific way:
@Provider
public class MyFilter implements ClientRequestFilter {
public void filter(final ClientRequestContext clientRequestContext) {
final Method method = (Method) clientRequestContext
.getProperty("org.eclipse.microprofile.rest.client.invokedMethod");
Class<?> declaringClass = method.getDeclaringClass();
System.out.println(declaringClass);
MyAnnotation myAnnotation = declaringClass.getAnnotation(MyAnnotation.class);
System.out.println(myAnnotation.value());
}
}
它必须适用于所有实现,包括 RESTEasy(经典和反应式)或 Apache CXF。