RestEasy @ApplicationPath使用模式

时间:2013-06-21 14:00:27

标签: java rest jax-rs resteasy

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

我试过这个:

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

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

/MyApplication/rest/v1/

/AnotherApp/rest/v1/

到同一个应用程序。

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

编辑:

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

1 个答案:

答案 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/