0

伙计们,我发现 / 似乎有问题(错误?)MSF4J 因为在 URI 中包含 @MatrixParam 注释变量会导致受影响的(微)服务无限期地“挂起”,或者如果通过浏览器访问,为路径/端点提供“404 Not Found”消息,即使是正确的。

这是一个说明问题的代码片段 - 它编译正常(eclipse/maven)并以通常的方式使用 microservicesrunner() 进行部署而没有错误。

package org.test.service;

import javax.ws.rs.GET;
import javax.ws.rs.MatrixParam;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;

@Path("books")

public class MPTest {   // MatrixParam Test

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/query")

   // method to respond to 'GET' requests
   public Response getListOfBooks(@MatrixParam("Author") String author) {

   // do something in here to get book data from DB and sort by titles
   List<String> titles = .......;

   return Response.status(200) .entity("List of Books by " +author+ "ordered by title " + titles).build();
   }
}

使用此代码片段,访问 URL "(host:8080)/books/query;Author=MickeyMouse" 应该会导致从数据库中检索该作者的书籍列表(为了清楚起见,我省略了这样做的实际代码,因为它与这篇文章无关)。

但是,它没有到达那里,因此没有执行代码。据我可以通过调试器判断,没有检索到 @MatricParam 值 - 在进程超时之前它保持为空。curl 和 wget 之类的东西会一直挂起,直到它们超时,并且从浏览器中,我能得到的最好结果是 URI 的 404 not found 错误,即使它是有效的。

但是,如果我将 @MatrixParam 替换为 @PathParam 它可以完美运行,并且我可以获取整个检索到的 URL 字符串。我得到的 URI 符合预期 - 没有奇怪的十六进制字符,没有拼写错误等等。输入的 URI 就是您返回的内容。所以,那里没有问题。

跨平台的行为也是一致的(Linux 的几个版本,以及 Windoze 的三个版本),所以它与操作系统本身没有任何关系。同样,我在多个客户端和工具上得到相同的行为,所以那里也不是问题。

所以,这似乎是 MSF4J 框架/域中的一个问题,我可以在这里使用一些支持/帮助/建议,因为我已经达到了撕毁我的头发的地步......任何想法,伙计们?

我能找到的对类似问题的唯一参考被关闭为“off topic”而没有回复(请参阅Rest API Matrix param annotation)所以我认为这需要重新打开,因为它似乎是一个真正的问题......

问候,并提前感谢您的帮助,里克

4

1 回答 1

0

@MatrixParam目前 MSF4J 不支持。您可以创建一个 GitHub 问题。所以我们可以在未来的版本中实现这种支持。

于 2017-06-04T23:41:17.137 回答