0

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

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

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

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

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

为了实现上述功能,实现了拦截器类(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 {  ......} 
}

我能够在接受方法中验证 VrestAuto 注释。但是在 preProcess 方法中,如何调用带有两个参数(企业 ID、电路类型)的 REST 方法?

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

非常感谢您的帮助。

4

1 回答 1

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);
   ....
}
于 2013-06-19T20:31:34.513 回答