问题很简单,但这意味着更奇怪。
我的方法定义如下(例如)
@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的错误 - 但没有发现类似的东西。我很难相信在这个简单的(基本用法)示例中甚至可能存在错误。
感谢您的帮助。
P.S。当我使用 @Context Dispatcher (我通过JBOSS获取所有可用的REST方法)创建基于反射的REST文档时,这些非工作URL方法通常被提及为已部署: - ))
答案 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;),例如