我如何通过Jboss Resteasy拦截器实现?

时间:2013-06-06 06:32:22

标签: api jboss resteasy interceptor

我正在研究Jboss Resteasy API以在Jboss服务器上实现REST服务。我是这个领域的新手。有人可以帮助我......

有一个带有自定义注释的Rest Service方法(VRestAuto),如下所示。

@POST
@Produces("text/json")
@Path("/qciimplinv")
@Interceptors(VRestInterceptor.class)
public String getInvSummary(@VRestAuto("EnterpriseId") String enterpriseId,String circuitType){
   ....
   businessMethod(enterpriseId,circuitType);
   ....
}

@VRestAuto注释告诉我们'enterpriseId'值在用户会话中可用。

用户在Circuit Client工具中单独传递circuitType作为POST参数。理想情况下,从会话中读取enterpriseid并使用这两个参数调用Rest服务(enterpriseid,circuitType)。

为了实现上述功能,实现了如下的Interceptor类(VRestInterceptor):

public class VRestInterceptor implemnets PreProcessInterceptor,AcceptedByMethod  {
public boolean accept(Class declaring, Method method) {
      for (Annotation[] annotations : method.getParameterAnnotations()) {
             for (Annotation annotation : annotations) {
                 if(annotation.annotationType() == VRestAuto.class){
                     VRestAuto vRestAuto = (VRestAuto) annotation;
                    return vRestAuto.value().equals("EnterpriseId");
                 }
             }
         }
         return false;
     }
            Override
     public ServerResponse preProcess(HttpRequest request, ResourceMethod method)
             throws Failure, WebApplicationException {  ......} 
}

我能够在accept方法中验证VRestAuto注释。但是在preProcess方法中,如何使用两个参数(enterpriseid,circuitType)调用REST方法?

如果这些拦截器不合适,是否有其他拦截器最适合此功能?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

为什么不忘记在调用方法时设置enterpriseId值,而只是注入HttpServletRequest并使用它来获取会话和值?

@POST
@Produces("text/json")
@Path("/qciimplinv")
public String getInvSummary(String circuitType, @Context HttpServletRequest servletRequest) {
   HttpSession session = servletRequest.getSession();

   String enterpriseId = session.getAttribute("EnterpriseId").toString();

   ....
   businessMethod(enterpriseId,circuitType);
   ....
}