繁体   English   中英

如何在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 响应式实现中获取这些信息。

谢谢你的帮助

这是MicroProfile REST 客户端的具体方式

@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。

这应该有效:

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 package,因此可能会发生变化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM