我是Restful
服务的新手。我正在检查一个代码,发现了这行
@GET
@Path("{image:image/.*}")
有人能解释一下以上语法的含义和用法吗?
@Path
表示法支持匹配路径的普通字符串或匹配模式的正则表达式。在您的情况下
@Path("{image:image/.*}")
似乎只是符合的模式
路径参数{image}具有任何模式,如image/.*,基本上翻译为image/anything,这里的anything不是指单词"anything",而是其字面意思,即任何有效文本。
更正:请参阅@Sotirios Delimanolis的回答以了解完整的详细信息。感谢队友的修正意见。
该表示法被称为URI路径模板,并在文档中进行了描述。
您可以通过在括号{}
中声明一个新的模板变量来定义它。JX-RS环境将把来自请求的URI的相应路径段绑定到声明的@PathParam
处理程序方法参数。
从文件
URI路径模板是URI中嵌入变量的URI语法。这些变量在运行时被替换为用于响应基于所述被替换的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变量必须与正则表达式匹配"[^/]+?" 可以通过指定不同的变量名后面的正则表达式。例如,如果用户名称只能由小写和大写字母数字组成字符,重写变量中的默认正则表达式定义:
@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 */ }
并且CCD_ 10将具有值CCD_。