0

我正在尝试使用 RestEasy 和 Jax-Rs 将请求路由到 Java 应用程序中的适当资源。但是,我在使用 @ApplicationPath 注释时遇到了问题。我想传入一个模式并让它将任何匹配该模式的东西路由到正确的位置

我试过这个:

@ApplicationPath("*/rest/v1/")...

我可以路由一条路径,例如:

/MyApplication/rest/v1/

或者

/AnotherApp/rest/v1/

到同一个应用程序。

但是,RestEasy 给了我一个 404,它无法匹配资源,但是如果我硬编码没有 */ 的路径,它可以正常工作。是否可以在@ApplicationPath 中放置这样的模式?

编辑:

这样做的全部目的是使应用程序的根路径可配置,并使其通过过滤器运行以检查配置。但是,如果可能有一种在运行时配置 @ApplicationPath 的方法,那将是一个更好的解决方案。

4

1 回答 1

0

@ApplicationPath是应用程序级别的前缀,即所有路径都需要以给定值开头。

供个人资源使用@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/

于 2013-06-21T14:24:01.237 回答