2015-12-17 43 views
6

我是Restful服务的新手。我正在通过一个代码,发现这条线冒号(:)在@Path注释中的含义

@GET 

@Path("{image:image/.*}") 

有人可以请解释上述语法的含义和用法?

+0

它只是使用正则表达式的一部分... –

+0

@JunedAhsan它不是,至少不是'image:'前缀。 –

回答

4

@Path符号支持正常字符串匹配路径或匹配模式的正则表达式。在你的情况

@Path("{image:image/.*}") 

似乎与像图像的任何模式/.*,基本上转化为图像/任何东西只是匹配

路径PARAM {}图像的模式,这里的任何不指的是“任何东西”一词,但它的字面含义,即任何有效的文字。

更正: 参考@Sotirios Delimanolis答案的完整细节。感谢队友进行更正输入。

3

该符号被称为URI路径模板,并在documentation中进行了描述。

您可以通过在括号内声明{}来定义一个新的模板变量。 JX-RS环境将从请求的URI中将相应的路径段绑定到声明的@PathParam处理程序方法参数。

从文档

URI路径模板嵌​​入的URI语法 内的变量的URI。这些变量在运行时被替换,以便 资源根据替换的URI响应请求。 变量用大括号表示({}。例如,看一下 以下@Path注释:

@Path("https://stackoverflow.com/users/{username}") 

在这样一个例子,一个用户被提示输入他或她的名字, 然后配置JAX-RS Web服务的请求作出回应这个URI路径模板响应这个 。例如,如果用户键入 用户名“伽利略”的Web服务响应以下网址:

http://example.com/users/Galileo 

要获得用户名的值时,@PathParam注释可以 所用的请求方法的方法参数,如图所示在 下面的代码示例:

@Path("https://stackoverflow.com/users/{username}") 
public class UserResource { 

    @GET 
    @Produces("text/xml") 
    public String getUser(@PathParam("username") String userName) { 
     ... 
    } 
} 

的文档然后继续指定符号的语法

默认情况下,URI变量必须与正则表达式 [^ /] +匹配”?“该变量可以由变量名后指定一个不同 正则表达式来定制。例如,如果一个用户 名必须仅包括小写和大写字母数字 字符,在可变 覆盖默认的正则表达式定义:

@Path("users/{username: [a-zA-Z][a-zA-Z_0-9]}") 

在本例中的用户名的变量将匹配 与一个大写或小写字母和零个或多个 字母数字字符和下划线字符开头唯一的用户名如果​​用户名 d OES与该模板不匹配,404(Not Found)响应将被发送到客户端 。

所以,你的例子

@Path("{image:image/.*}") 

定义了一个名为image一个URI模板变量包含段相匹配的正则表达式

image/.* 

的JAX-RS的环境,因此将使用请求注释的方法与URI匹配

http://somehost.com/context-path/image/[anything] 

据推测,您的方法将有一个参数

@Path("{image:image/.*}") 
public Response handle(@PathParam("image") String path) { /* handling */ } 

path将有"image/[anything]"值。