在上一篇文章中,我们看到了如何在Java EE MVC中使用查询参数 。 这篇文章继续与一个非常相似的主题:路径参数。
路径参数是请求路径的动态部分,可以使用@Path注释指定。
例如:
@Controller
@Path("path-params")
public class PathParamsController {@GET@Path("/date/{year}/{month}")public String pathParamDate(@PathParam("year") int year, @PathParam("month") int month) {...}
}
Paths参数在@Path批注内用大括号括起来。 在此示例中,定义了两个路径参数:年和月。
使用@PathParam可以将路径参数映射到方法参数。
我们可以通过发送请求到
/path-params/date/2016/01
在这种情况下,2016和1将作为年和月参数传递。
类型转换
路径参数使用与查询参数相同的类型转换规则( 在上一篇博客文章中进行了解释 )。
例如,我们可以将路径参数转换为枚举值,如下所示:
public enum Role {admin, reporter, accountant
}
@Controller
@Path("path-params")
public class PathParamsController {@GET@Path("/roles/{role}")public String pathParamUsers(@PathParam("role") Role role) {...}
}
如果我们现在向发送请求
/path-params/roles/admin
字符串admin被转换为相应的枚举常量。
在字段和方法上使用@PathParam
像@QueryParam一样,@PathParam的用法不限于方法参数。 也可以使用@PathParam注释字段或设置器。
例如:
@Controller
@Path("path-params")
public class PathParamsController {@PathParam("category")private String category;@GET@Path("/categories/{category}")public String findByCategory() {// work with category}
}
将路径参数与模式一起使用
可以为路径变量定义更具体的模式。 因此,可以在路径变量的名称之后添加正则表达式。
例如:
@Controller
@Path("path-params")
public class PathParamsController {@GET@Path("/users/{id : \\d+}")public String findUserById(@PathParam("id") long id) {...}@GET@Path("/users/{name : [a-zA-Z]+}")public String findUserByName(@PathParam("name") String name) {...}
}
在这里,我们定义了两种监听/ users / {variable}的控制器方法:
- 仅当数字ID是请求路径的一部分时才调用findUserById()
- 如果path参数与正则表达式[a-zA-Z] +相匹配,则使用findUserByName()。
因此,如果我们向发送请求
/path-params/users/123
将调用findUserById()并将ID作为ID传递123。
向发送请求
/path-params/users/john
调用findUserByName()并传递john作为名称。
快速总结
@PathParam可用于提取使用@Path定义的路径参数。 与@QueryParam一样,@ PathParam可以用于方法参数,实例字段和方法。
使用@Path定义路径参数时,可以使用正则表达式来定义特定的路径模式。
- 您可以在GitHub上找到所有显示示例的源代码。
翻译自: https://www.javacodegeeks.com/2016/02/java-ee-8-mvc-working-path-parameters.html