我正在尝试使用RestEasy和Jax-R将请求路由到Java应用程序中的适当资源。但是,我在使用@ApplicationPath注释时遇到问题。我想传递一个模式,让它将匹配该模式的任何东西路由到正确的位置
我试过这个:
@ApplicationPath("*/rest/v1/")...
我可以路由一条路径,例如:
/MyApplication/rest/v1/
或
/AnotherApp/rest/v1/
到同一个应用程序。
然而,RestEasy给了我一个404,它无法与资源匹配,但如果我硬编码一个没有* /的路径,它就可以正常工作。是否可以在@ApplicationPath中添加这样的模式?
编辑:
这样做的目的是使应用程序的根路径可配置,并让它通过过滤器来检查配置。但是,如果有可能在运行时配置@ApplicationPath,那将是一个更好的解决方案。
答案 0 :(得分:1)
@ApplicationPath
仅用于RestEasyActivator类。
资源使用@Path
。现在,当它被清除时,请阅读:
@Path注释不仅限于简单路径表达式。您还可以将正则表达式插入@Path的值。例如:
@Path("/resources)
public class MyResource {
@GET
@Path("{var:.*}/stuff")
public String get() {...}
}
以下GET将路由到getResource()方法:
GET /resources/stuff
GET /resources/foo/stuff
GET /resources/on/and/on/stuff
表达式的格式为:
"{" variable-name [ ":" regular-expression ] "}"
正则表达式部分是可选的。如果未提供表达式,则默认为一个特定段的通配符匹配。在正则表达式术语中,表达式默认为 “([] *)”
例如:
@Path("/resources/{var}/stuff")
将匹配这些:
GET /resources/foo/stuff
GET /resources/bar/stuff
但不匹配:
GET /resources/a/bunch/of/stuff
链接:http://docs.jboss.org/resteasy/docs/1.0.0.GA/userguide/html_single/