问题很简单,但是这意味着更奇怪。
我的方法定义如下(例如)
@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 日志中未发现错误。
感谢您的帮助。
附注当我使用 @Context Dispatcher 制作基于反射的 REST 文档时(我通过 JBOSS 获取了所有可用的 REST 方法),这些非工作 URL 方法通常被提到为已部署:-))
最佳答案
不知道这是否有帮助,但我也遇到过类似的问题。 This文章可能对你有帮助。阅读完所有内容后,我找到了所有问题的解决方案。答案是从 Resteasy 版本 3.0.9.Final 切换回 2.3.5.Final。它并不完美,事实上它很丑,但效果很好......
关于java - RESTEasy - 某些方法 URL 地址不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31360159/