朋友们,我发现了/ (bug in ?)当在URI中包含@MatrixParam注释变量时,MSF4J会导致受影响的(微)服务无限期地‘挂起’,或者如果通过浏览器访问,即使正确,也会给出路径/端点的“404Not 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“应该会导致从DB检索该作者的图书列表(为了清楚起见,我省略了实际的代码,因为它与本文无关)。
然而,它不会到达那里,所以代码不会被执行。据我所知,调试器没有检索到@MatricParam值-它在进程超时之前一直保持为空。像curl和wget这样的东西只是挂起,直到它们超时,从浏览器中,我能得到的最好的URI是404not found错误,即使它是有效的。
但是,如果我将@MatrixParam替换为@PathParam,它可以很好地工作,并且我可以完整地检索URL字符串。我得到的URI和预期的一样-没有奇怪的十六进制字符,没有打字错误,等等。输入的URI就是您返回的内容。所以,这里没有问题。
行为在不同的平台上也是一致的(几种风格的Linux和三个版本的Windoze),所以它与操作系统本身没有任何关系。类似地,我在多个客户端和工具上也得到了相同的行为,所以这也不是问题。
所以,这似乎是MSF4J框架/领域中的一个问题,我可以在这里得到一些支持/帮助/建议,因为我已经到了抓狂的地步……有什么想法吗,伙计们?
我能找到的关于类似问题的唯一参考资料是“关闭主题”而没有回复(参见Rest API Matrix param annotation),所以我认为这需要重新打开,因为它似乎是一个真正的问题……
致以问候,并提前感谢你的帮助,瑞克
发布于 2017-06-05 07:41:17
MSF4J目前不支持@MatrixParam。您可以创建GitHub问题。因此我们可以在将来的版本中实现该支持。
https://stackoverflow.com/questions/44306800
复制相似问题