@Path注释中冒号(:)的含义

时间:2015-12-17 06:19:17

标签: java rest

我是Restful服务的新手。我正在查看代码并找到了这一行

@GET

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

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

2 个答案:

答案 0 :(得分:4)

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

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

似乎只是匹配

的模式
  

路径参数{image},任何模式,如图像/.*,基本上转换为图像/任何东西,这里的任何东西都不是指“任何”这个词,而是它的字面含义,即任何有效的文本。

<强>校正: 有关完整的详细信息,请参阅@Sotirios Delimanolis答案。谢谢配偶纠正输入。

答案 1 :(得分:4)

表示法称为URI路径模板,并在documentation中进行了描述。

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

来自文档

  

URI路径模板是URI中嵌入了变量的URI   句法。这些变量在运行时被替换为a   资源,以响应基于替换URI的请求。   变量用大括号({}表示。例如,看看   关注@Path注释:

@Path("/users/{username}")
     

在这种示例中,系统会提示用户输入他或她的名字,   然后配置一个JAX-RS Web服务来响应请求   此URI路径模板响应。例如,如果用户键入   用户名“Galileo”,Web服务响应以下URL:

http://example.com/users/Galileo
     

要获取用户名的值,@PathParam注释可能是   用于请求方法的方法参数,如下所示   下面的代码示例:

@Path("/users/{username}")
public class UserResource {

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

然后,文档继续指定符号

的语法
  

默认情况下,URI变量必须与正则表达式匹配   “[^ /] +?”即可。 可以通过指定其他变量来自定义此变量   变量名后的正则表达式。例如,如果是用户   name必须仅包含小写和大写字母数字   字符,覆盖变量中的默认正则表达式   定义:

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

在此示例中,username变量仅匹配用户名   以一个大写或小写字母开头,零个或多个   字母数字字符和下划线字符。如果是用户名   与该模板不匹配,将发送404(未找到)响应   给客户。

所以你的例子

@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]"