RESTEasy - 某些方法URL地址不起作用

时间:2015-07-11 17:59:48

标签: java rest jboss path resteasy

问题很简单,但这意味着更奇怪。

我的方法定义如下(例如)

@GET
@GZIP
@Path("/v2/something/anything/goes/here")
void getData(@BeanParam ApiCommonRequest req) throws Exception;

当远程主机调用此URL地址时,JBoss会回复:“无法找到完整路径的资源:http://localhost/rest/v2/something/anything/goes/here

有趣的部分是(经过几个小时的调查后我发现)当我将URL开头(在服务器@Path定义中)从“/ v2”更改为“/ v3”时,它会正常工作。< /强>

以下完全有效:

@GET
@GZIP
@Path("/v3/something/anything/goes/here")
void getData(@BeanParam ApiCommonRequest req) throws Exception;

我尝试了所有可以想象的组合,没有“v2”和类似的不是特定的问题 - 它也受到其他URL地址的困扰 - 没有多大意义,它有什么特别的错误。

它甚至帮助将URL部分分离到不同的@Path注释 - 意思是:当我有相同的URL工作而不工作时 - 只将URL的一部分放到父类@Path定义。那个“修复它”(再次 - 相同的URL地址工作和不工作受@Path注释的影响略有不同)。所以这似乎意味着URL地址不会出现问题 - 就像使用一些URLRewrite配置一样。 (我也检查过,如果可能存在冲突)

所以这不起作用:

@Path("/rest")
public interface MyAPI {
  @GET
  @GZIP
  @Path("/v2/something/anything/goes/here")
  void getData(@BeanParam ApiCommonRequest req) throws Exception;
}

但这有效!:

@Path("/rest/v2")
public interface MyAPI {
  @GET
  @GZIP
  @Path("/something/anything/goes/here")
  void getData(@BeanParam ApiCommonRequest req) throws Exception;
}

需要将“/ v2 / something / anything / goes / here”改为“/ v3 / something / anything / goes / here”没有任何意义,并不是真正的解决方案。

这可能是一些RESTEasy JBOSS错误吗?我确实花了很多时间通过互联网挖掘类似的问题/ JBOSS的错误 - 但没有发现类似的东西。我很难相信在这个简单的(基本用法)示例中甚至可能存在错误。

  • 有一点可能有用,是在某些错误消息或任何日志条目的启动过程中观察JBOSS RestEasy方法安装的一些方法吗?在JBOSS的日志中找不到错误。

感谢您的帮助。

P.S。当我使用 @Context Dispatcher (我通过JBOSS获取所有可用的REST方法)创建基于反射的REST文档时,这些非工作URL方法通常被提及为已部署: - ))

2 个答案:

答案 0 :(得分:1)

不知道这是否有帮助,但我遇到了类似的问题。 This文章可能会对您有所帮助。在阅读完所有内容后,我找到了所有问题的解决方案。答案是从resteasy版本3.0.9.Final切换回2.3.5.Final。它并不完美,事实上它很难看,但效果还不错......

答案 1 :(得分:1)

我发现了问题的根源(可能只与JBoss RestEasy有关):

使用@Path(&#34; / rest / v1&#34;)等URL前缀注释接口时,然后使用@Path(&#34; / store / items /...&#)注释单独的方法34;)应该在URL&#34; / rest / store / v1 / items /..."生成资源; ,当您创建具有相同前缀注释的另一个接口文件(例如/ rest / v1 /)时,会出现问题。然后他们发生冲突,其中一个被忽略了。

解决方案是只有一个相同接口路径的实例。所以只有一个带@Path的文件(&#34; / rest / store&#34;),例如