神奇好望角 The Magical Cape of Good Hope

庸人不必自扰,智者何需千虑?
posts - 26, comments - 50, trackbacks - 0, articles - 11
  BlogJava :: 首页 ::  :: 联系 :: 聚合  :: 管理

JAX-RS 从傻逼到牛叉 6:参数注入

Posted on 2011-12-29 16:34 蜀山兆孨龘 阅读(4397) 评论(4)  编辑  收藏 所属分类: Java EESOA

《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。


评论

# re: JAX-RS 从傻逼到牛叉 6:参数注入  回复  更多评论   

2014-05-22 16:04 by 8
785

# re: JAX-RS 从傻逼到牛叉 6:参数注入  回复  更多评论   

2014-05-22 16:05 by 8
8

# re: JAX-RS 从傻逼到牛叉 6:参数注入  回复  更多评论   

2014-05-22 16:05 by 8
9

# re: JAX-RS 从傻逼到牛叉 6:参数注入[未登录]  回复  更多评论   

2015-05-04 12:32 by abc
13

只有注册用户登录后才能发表评论。


网站导航: