有一段时间没有更新博客,主要是最近一段时间自己比较迷茫,一直在思考自己以后的路该怎么走。希望大家也可以给我一些建议,谢谢!好了,回归正题,今天给大家带来的是spring+resteay开发webservice服务,不知道大家是否在这之前接触过webservice,我之前所了解的webservice是使用cxf还有axis2开发的,但是我觉得实现起来比较麻烦,而且不灵活,今天给大家介绍一种比较灵活的提供webservice服务的技术:resteasy。下面我重点讲解的resteasy常用的一些知识。我依然是结合例子给大家讲解。
package com.jrj.resteasy; import javax.ws.rs.CookieParam; import javax.ws.rs.DefaultValue; import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; import javax.ws.rs.MatrixParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.PathSegment; import org.jboss.resteasy.annotations.Form; import org.springframework.stereotype.Controller; import com.alibaba.fastjson.JSONObject; import com.jrj.entity.FormEntity; @Controller @Path("/content") public class ContentService { /** * path通配符 * @return */ @Path("/pathRegular/{msg}") @GET public String pathRegular(@PathParam("msg") String m){ return m; } /** * {var:.*}代表可以是任意多个路径名,如:a/b/c * @param m * @return */ @Path("/pathRegular1/{var:.*}/{msg}") @GET public String pathRegular1(@PathParam("msg") String m){ return m; } /** * {var}代表只能有一个路径名,如:a * @param m * @return */ @Path("/pathRegular1/{var}/{msg}") @GET public String pathRegular2(@PathParam("msg") String m){ return m; } /** * @PathParam的用法 * @param param * @return */ @Path("/pathParam/{param}") @GET public String pathParam(@PathParam("param") String param){ return "hello"+param; } /** * @QueryParam的用法,如:GET /queryParam/2?name=wenqiang&age=23 * @param id * @param name * @param age * @return */ @Path("/queryParam/{id}") @GET public String queryParam(@PathParam("id") int id, @QueryParam("name") String name, @QueryParam("age") int age){ if(id==1){ return "this is no people"; } return "name is "+name+"age is" +age; } /** * @HeadParam的用法,其中HeaderParam可以获取httpheader中的一些信息 * @param head * @param myhead * @return */ @Path("/headParam/{head}") @GET public String headParam(@PathParam("head") String head, @HeaderParam("myhead") String myhead){ return head + " is " + myhead; } /** * @MatixParam的用法(矩阵参数),如:GET:/matixParam/wenqiang;sex=male;age=23 * @param name * @return */ @Path("/matixParam/{name}") @GET public String matixParam(@PathParam("name") String name, @MatrixParam("sex") String sex, @MatrixParam("age") int age){ return "name is " + name +" age is " + age +" sex is "+sex; } /** * 使用@PathParam和PathSegment来实现MatixParam * 当矩阵参数中存在着相同的参数使用@MatixParam来获取参数会出现问题,此时应该使用@PathParam和PathSegment实现 * GET:/matixParam/wenqiang;sex:male;age:23 * @return */ @Path("/pathSegment/{info}") @GET public String pathSegment(@PathParam("info") PathSegment info){ StringBuffer sb = new StringBuffer("name is "); MultivaluedMap<String, String> paraMap = info.getMatrixParameters(); /** * 也可以使用迭代器 */ /* for(Iterator<String> it = paraMap.keySet().iterator();it.hasNext();){ String temp = paraMap.get(it.next()).get(0); }*/ String temp = paraMap.get("name").get(0); sb.append(temp); temp = paraMap.get("age").get(0); sb.append(" age is " + temp); temp = paraMap.get("sex").get(0); sb.append(" sex is " + temp); return sb.toString(); } /** * @CookieParam的用法 * @param cookie * @param sum * @param sessionid * @return */ @Path("/cookieParam/{cookieName}") @GET public String cookieParam(@PathParam("cookieName") String cookie, @QueryParam("sum") int sum, @CookieParam("JSESSIONID") String sessionid){ return "cookieName is " + cookie + "sessionId is " + sessionid + " sum is " + sum; } /** * @FormParam的用法,通过form表单传递值 * @param name * @param firstname * @param secondname * @return */ @Path("/formParam/{name}") @POST public String formParam(@PathParam("name") @DefaultValue("limin") String name, @FormParam("firstname") String firstname, @FormParam("secondname") String secondname){ return name+ " firstname is " + firstname + " secondname is " + secondname; } /** * @Form的用法,使用@Form可以把其他的@*Param的类型的参数放在同一个类中 * @return */ @Path("/form") @GET public String form(@Form FormEntity entity){ return entity.toString(); } /** * @Context的用法,@Context只允许注入以下这些类的实例: * javax.ws.rs.core.HttpHeaders * javax.ws.rs.core.UriInfo * javax.ws.rs.core.Request * javax.servlet.HttpServletRequest * javax.servlet.HttpServletResponse * javax.servlet.ServletConfig * javax.servlet.ServletContext * javax.ws.rs.core.SecurityContext * @param headers * @return */ @Path("/context") @POST public String context(@Context HttpHeaders headers,String content){ JSONObject jsonObject = JSONObject.parseObject(content); String name = jsonObject.getString("name"); int age = jsonObject.getIntValue("age"); return name+","+age; } }
大家通过看上面的例子应该发现了resteasy的使用方式和springmvc的使用方式很相似,下面我来详细讲解这些注解的意思:
1、@Path相当于springmvc中的@RequestMapping,就是标识请求路径,使用@Path来标识resteasy的请求路径,在@Path中可以含有通配符,大概就三种方式,上面代码中都有注释讲解,如果还有童鞋对于通配符不知道是什么东西,花点时间去了解一些。
2、@GET,@POST,@PUT,@DELETE这些表示请求该路径的方法,和springmvc中的RequestMethod.GET等,一般我们常用的就是@GET和@POST
3、@PathParam,这个表示的是获取路径中的参数,在路径中用{}包含
4、@QueryParam,这个表示的是路径中的参赛,用&连接
5、@HeadParam,这个表示httpheader中的数据
6、@MatixParam,这个表示的获取路径中的矩阵参数
7、@PathParam和Segment混合同样可以实现和@MatixParam一样的效果
8、@CookieParam,顾名思义获取cookie中的信息
9、@FormParam,表单传递
10、@Form,可以包含其他的@*Param
11、如果传递的是Json数据的,不需要使用注解,直接在参数列表中声明变量,然后再解析出来
12、大家可以通过使用httpclient来代码级别访问,同时为大家介绍一个chrome的httpclient插件postman
以上就是resteasy的基本开发,很简单吧,大家赶紧试试把,后续为大家带来springmvc处理请求的一些知识,敬请期待!我们下期再见!
resteasy的文档:http://docs.jboss.org/resteasy/docs/3.0.7.Final/userguide/html/index.html
本文出自 “技术无止尽,学习需多动脑” 博客,请务必保留此出处http://wenqiangv.blog.51cto.com/7889138/1429874