在《JAX-RS 从傻逼到牛叉 3:路径匹配》中,我们已经见过如何使用 @PathParam
、@QueryParam
和 @MatrixParam
分别注入 URI 中的路径参数、矩阵参数和查询参数,以及如何编程访问这些参数。本文介绍表单参数、HTTP 头部参数和 Cookie 参数的注入。
表单参数
HTTP 请求也可以使用提交表单的方式。这时请求方法一般是 POST,当然春哥也无法阻止你用 GET。在前面我们虽然介绍过处理 POST 请求的例子,但那只是利用了 JAX-RS 对 JAXB 的支持,并没有涉及到对具体请求参数的注入。JAX-RS 提供了 @FormParam
注解来注入 POST 请求的参数,例如:
@POST
public Response createMovie(@FormParam("title") String title) {
// 此处省略若干行
}
这儿省略了 @Consumes
注解,JAX-RS 会自动默认为 @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
,也就是 application/x-www-form-urlencoded
格式的请求。如果请求格式为 multipart/form-data
,就必须显示指明:
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response createMovie(@FormParam("title") String title) {
// 此处省略若干行
}
JAX-RS 还支持文件的上传和下载,以后再介绍。
HTTP 头部参数
注入 HTTP 头部参数简单得不能再简单了:
@GET
@Path("xxx")
@Produces(MediaType.TEXT_PLAIN)
public String xxx(@HeaderParam("User-Agent") String userAgent) {
// 此处省略若干行
}
如果有很多头部参数,为了避免臃肿的参数列表,可以注入一个头部对象,然后编程访问头部参数:
@GET
@Path("xxx")
@Produces(MediaType.TEXT_PLAIN)
public String xxx(@Context HttpHeaders headers) {
// 此处省略若干行
}
Cookie 参数
注入 Cookie 参数同样的简单:
@GET
@Path("xxx")
@Produces(MediaType.TEXT_PLAIN)
public String xxx(@CookieParam("userName") String userName) {
// 此处省略若干行
}
如果希望编程访问,则可以像编程访问那样注入一个 HttpHeaders
对象,然后通过它的 getCookies()
方法来获取所有的 Cookie。