概览
- 基于restful风格访问中使用的多种注解介绍
- restful风格后台代码接收前台传递json数据的特殊方式
jersey restful风格相关注解介绍
- @QueryParam
- queryparam注解用来修饰变量,用来得到GET方式传递的参数,QueryParam注解的具体使用方法如下:
@QueryParam("limit") @DefaultValue("10") Integer limit,
@QueryParam("curpage") @DefaultValue("1") Integer curpage,
(@DefaultValue注解这里就不再多介绍,意思就是当url未携带参数,queryparam未取到值,则将这个queryparam注解标记的变量赋值为defaultvalue设定的值) queryparam注解用来标注变量,而且只有当访问方式为GET,才能去得到访问路径以xxxx?xx=?&xx=?的值。
- @FormParam
- formparam注解的功能就跟其含义一样,得到从表单传递过来的值,其具体使用方式如下:
(@FormParam("name")String name,@FormParam("password")String password)
- @Consumes
- consumes注解用来修饰方法,如果是以@GET方式标记的方法,则不需要使用@Consumes注解去标记这个方法了,但是当一个方法以@POST方式标记的方法,则必须使用@Consumes方式去标记这个方法。
consumes注解用来表示这个post方式标记的方法将接受何种类型的数据。
- application/json
- application/x-www-form-urlencoded
- text/plain
- ….
分别表示接收json 格式参数,form提交参数,以及普通的string类型参数等。还有其他更多的接收参数类型。
还可以在consumes注解中添加多个接收参数类型。
@Consumes({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_JSON})
- @Produces
- produces注解用来修饰方法,produces注解表示执行方法将返回何种类型的数据,可以是xml类型,也可以是json类型,同consumes注解一样,需要指定需要输出的类型后去标记方法,同样也可以执行返回多个类型。
@Produces({MediaType.APPLICATION_JSON})
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
- @Context
- context注解用来修饰变量,但是修饰的这个变量不一般,context用来修饰的是servlet api,比如HttpServletRequest,HttpServletReponse,HttpHeader等。修饰的形参将会被框架注入这些servlet api。具体使用方式如下:
public JSONObject getExpertByQueryString(
@QueryParam(“limit”) @DefaultValue(“10”) Integer limit,
@QueryParam(“curpage”) @DefaultValue(“1”) Integer curpage,
@QueryParam(“query_string”) String queryString,
@Context HttpHeaders headers, @Context HttpServletResponse response)这样就可以得到servlert api,可以设置跨域访问以及getparamter之类的了,getparamter最好用queryparam注解标注的变量去获取。
- @Path
- path注解用来修饰方法,path注解用来指定访问这个方法的路径,就跟springmvc的requestmapping注解使用方法是一样
@Path(“findbyquerystr”)
@Path(“findbycondition/{condition}”)//rest风格
- @PathParam
- pathparam用来修饰变量,pathparam用来获取restful风格url 占位符的值。
@PathParam(“condition”) String condition,
特殊方式接收前台传递的json数据
MutiValuedMap类。
如果前台使用post方式传递json参数,用MutiValuedMap的实例作为接收参数是不错的选择,MutiValuedMap作为Map的子类,当MutiValuedMap实例接受到json传递的值时,实例所有的key为json的key,value为json的所有key对应的value。
但是json传值的时候会在样式上有一些区别
{
type:’xx’,
name:’xx’,
password:’xx’
}如果以上述这种方式传递json,那通过键值形式获取值得方式为
valueParams.getFirst(“name”); (valueParams为MutiValuedMap类实例)
{
type:’xx’,
info:{
name:’xxx’,
password:’xxx’
}
}如果是以这种方式传递json,那通过键值形式获取值得方式为
valueParams.getFirst(“info[name]”);public JSONObject addExperts(MultivaluedMap<String, String> valueParams,@Context HttpHeaders headers, @Context HttpServletResponse response ) throws IOException { tableRow.setColumn("ename", valueParams.getFirst("info[ename]"));}