1. @PathParam
使用@PathParam可以获取URI中指定规则的参数,
举个例子:
类中
@Path("/user")
@GET
@Path("{username"})
@Produces(MediaType.APPLICATION_JSON)
public User getUser(@PathParam("username") String userName) { ... }
当浏览器请求http://localhost/user/jack时,userName值为jack。
注意,这里的username并不是说Key是username, value是jack而是说/usr/后面跟着的东西就是username,这里username只是个变量
2.
@QueryParam
@QueryParam用于获取GET请求中的查询参数,
如:
@GET @Path("/user")
@Produces("text/plain")
public User getUser(@QueryParam("name") String name, @QueryParam("age") int age)
{ ... }
当浏览器请求http://host:port/user?name=rose&age=25时,name值为rose,age值为25。如果需要为参数设置默认值,可以使用
3. @DefaultValue,
如: @GET @Path("/user")
@Produces("text/plain")
public User getUser(@QueryParam("name") String name, @DefaultValue("26") @QueryParam("age") int age) { ... }
当浏览器请求http://host:port/user?name=rose时,name值为rose,age值为26。
4. @FormParam
@FormParam,顾名思义,从POST请求的表单参数中获取数据。
如: @POST @Consumes("application/x-www-form-urlencoded")
publicvoid post(@FormParam("name") String name)
{ // Store the message }
相信使用过html进行post提交的人对表单一定不陌生,可以想象成这就是在模拟html中表单的请求。
5. 使用Map
在一个大型的server中,因为参数的多变,参数结构的调整都会因为以上几种方式而遇到问题,这时可以考虑使用@Context 注释,并获取UriInfo实例,
如下:
@GET public String get(@Context UriInfo ui) {
MultivaluedMap queryParams = ui.getQueryParameters();
MultivaluedMap pathParams = ui.getPathParameters();
}
我觉得,可以认为map是上面几种情况的超集,因为它能够替代以上任意一种。map就是context 同样还可以通过@Context 注释获取ServletConfig、ServletContext、HttpServletRequest、HttpServletResponse和HttpHeaders等,
如下:
@Path("/")
publicclass Resource {
@Context HttpServletRequest req;
@Context ServletConfig servletConfig;
@Context ServletContext servletContext;
@GET
public String get(@Context HttpHeaders hh)
{
MultivaluedMap headerParams = hh.getRequestHeaders();
Map pathParams = hh.getCookies();
}
}