spring+resteasy開發webservice服務

有一段時間沒有更新博客,主要是最近一段時間自己比較迷茫,一直在思考自己以後的路該怎麼走。希望大家也可以給我一些建議,謝謝!好了,迴歸正題,今天給大家帶來的是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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章