一、@pathparam
@PathParam 是一个参数注解,可以将一个 URL 上的参数映射到方法的参数上,它可以映射到方法参数的类型有基本类型、字符串、或者任何有一个字符串作为构造方法参数的 Java 对象、或者一个有字符串作为参数的静态方法 valueOf 的 Java 对象(一般是从Get的url中获取参数值)。
@GET @Path("delProByPNumber/{param}") @Produces("application/json; charset=utf-8") public Response delPro(<strong>@PathParam("param") String pNumber</strong>){ session.delete("production.delete", pNumber); session.commit(); List list=queryAllPro(); return Response.status(201).entity(list).build(); }
访问路径:http://localhost:8888/Invoice/optPro/delProByPNumber/7
@pathparem中,URL中只出现参数的值,不出现键值对,比如: “/users/2011/06/30”
@GET @Path("{year}/{month}/{day}") public Response getUserHistory( @PathParam("year") int year, @PathParam("month") int month, @PathParam("day") int day) { String date = year + "/" + month + "/" + day; return Response.status(200) .entity("getUserHistory is called, year/month/day : " + date) .build(); }
另外:{var}代表只能有一个路径名,如:a;而{var:.*}代表可以是任意多个路径名,如:a/b/c
/** * {var:.*}代表可以是任意多个路径名,如:a/b/c */ @Path("/pathRegular1/{var:.*}/{msg}") @GET public String pathRegular1(@PathParam("msg") String m){ return m; } /** * {var}代表只能有一个路径名,如:a */ @Path("/pathRegular1/{var}/{msg}") @GET public String pathRegular2(@PathParam("msg") String m){ return m; }
二、@queryParam
@queryParam从/XXX/路径/?num=5中获取参数
@GET @Path("addAcc/parameters") @Produces("application/json; charset=utf-8") public Response addCus( @QueryParam("accname") String accname, @QueryParam("balance") long balance, @QueryParam("department") String department, ) { Account account=new Account(); account.setAccname(accname); account.setBalance(balance); return Response.status(201).entity(queryOne(accname)).build(); }
访问路径:http://localhost:8888/Invoice/optAcc/addAcc/parameters?accname=rr&balance=99999&department=heda,parameters后面为传入参数
Path("/users") public class UserService { @GET @Path("/query") public Response getUsers( @QueryParam("from") int from, @QueryParam("to") int to, @QueryParam("orderBy") List<String> orderBy) { return Response.status(200).entity("getUsers is called, from : " + from + ", to : " + to + ", orderBy" + orderBy.toString()).build(); }
URL输入为:users/query?from=100&to=200&orderBy=age&orderBy=name 此时,输出为: getUsers is called, from : 100, to : 200, orderBy[age, name]。
注意:跟@pathparam不同,@queryparam中,指定的是URL中的参数是以键值对的形式出现的,而在程序中 @QueryParam("from") int from则读出URL中from的值
三、@FormParam
将表单中的字段映射到方法调用上,对于此类方式一般提交方式为Post。
例如,对于下面的表单:
<form method="POST" action="/resources/service"> First name: <input type="text" name="firstname"> <br> Last name: <input type="text" name="lastname"> </form>
通过 post 方法提交,处理该请求的方法为:
Path("/") public class NameRegistry { @Path("/resources/service") @POST public void addName(@FormParam("firstname") String first, @FormParam("lastname") String last) {...} }
访问路径:http://localhost:8888/resources/services/hello/getName
也可以添加application/x-www-form-urlencoded来反序列化 URL 中的多参数:
@Path("/") public class NameRegistry { @Path("/resources/service") @POST @Consumes("application/x-www-form-urlencoded") public void addName(@FormParam("firstname") String first, MultivaluedMap<String, String> form) {...} }
参见:http://blog.csdn.net/programmeryu/article/details/50536024