我是Restful
服务的新手。我正在查看代码并找到了这一行
@GET
@Path("{image:image/.*}")
有人可以解释一下上述语法的含义和用法吗?
答案 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]"
。