Jersey+Spring+Maven(轉)


spring和maven的搭建參考相關文檔。本文只介紹與jersey有關配置。

一、jersey在maven中的依賴包

  • <!-- jersey -->

    <dependency>

        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>1.8</version>

      </dependency>

       <dependency> 

        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.8</version>

      </dependency>

      <dependency> 

        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>1.8</version>

      </dependency>

      <dependency> 

       <groupId>javax.ws.rs</groupId>
         <artifactId>javax.ws.rs-api</artifactId>
         <version>2.0-m10</version>

      </dependency>

      <dependency> 

        <groupId>javax.ws.rs</groupId>
        <artifactId>jsr311-api</artifactId>
        <version>1.1.1</version>

      </dependency>

    <dependency> 

        <groupId>asm</groupId>
        <artifactId>asm</artifactId>
        <version>3.3.1</version>

      </dependency>

      <!-- jersey end -->

需要json,加入以下

<!--  json-->

<dependency>

   <groupId>com.sun.jersey</groupId>

   <artifactId>jersey-json</artifactId>

   <version>1.8</version>

</dependency>

<dependency>

   <groupId>org.codehaus.jackson</groupId>

   <artifactId>jackson-mapper-asl</artifactId>

   <version>1.8.8</version>

</dependency>

  <!--  json-->

盡量保持包版本的一致

 

二、整合spring

 

1、 引入整合包,注意版本

<!-- jersey spring -->

<dependency>

            <groupId>com.sun.jersey.contribs</groupId>

            <artifactId>jersey-spring</artifactId>

            <version>1.8</version>

            <!-- 去除自帶的spring版本 -->

            <exclusions>

                <exclusion>

                    <groupId>org.springframework</groupId>

                    <artifactId>spring-aop</artifactId>

                </exclusion>

                <exclusion>

                    <groupId>org.springframework</groupId>

                    <artifactId>spring-context</artifactId>

                </exclusion>

                <exclusion>

                    <groupId>org.springframework</groupId>

                    <artifactId>spring-beans</artifactId>

                </exclusion>

                <exclusion>

                    <groupId>org.springframework</groupId>

                    <artifactId>spring-core</artifactId>

                </exclusion>

                <exclusion>

                    <artifactId>spring-web</artifactId>

                    <groupId>org.springframework</groupId>

                </exclusion>

            </exclusions>

        </dependency>

   <!-- jersey spring end-->

   2、web.xml配置

所有rest請求都經過spring過濾

<!-- jersey spring -->
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-spring</artifactId>
<version>1.8</version>
<!-- 去除自帶的spring版本 -->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<artifactId>spring-web</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- jersey spring end-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
 
三、編寫服務端資源
 

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement

public class User  implements java.io.Serializable{

  private static final long serialVersionUID = 1L;  

     private String userName = "";  

     private int age = 0;  

     public String getUserName() {  

         return userName;  

     }  

     public void setUserName(String userName) {  

         this.userName = userName;  

     }  

     public int getAge() {  

         return age;  

     }  

     public void setAge(int age) {  

         this.age = age;  

     }

     public String toString() {

      return "name:"+ userName + " age:" + age;

     }

}

import javax.ws.rs.FormParam;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement //表示可以被轉換為xml或json格式

public class Home   implements java.io.Serializable {

@FormParam("roomno")

private int roomNo;

@FormParam("address")

private String address;

private String longtime;

public int getRoomNo() {

  return roomNo;

}

public void setRoomNo(int roomNo) {

  this.roomNo = roomNo;

}

public String getAddress() {

  return address;

}

public void setAddress(String address) {

  this.address = address;

}

public String getLongtime() {

  return longtime;

}

public void setLongtime(String longtime) {

  this.longtime = longtime;

}

public String toString() {

  return "roomNo:" + roomNo + "  address:" + address + "  longtime:" + longtime;

}

}

 

2、編寫資源接口

import javax.ws.rs.BeanParam;

import javax.ws.rs.Consumes;

import javax.ws.rs.FormParam;

import javax.ws.rs.GET;

import javax.ws.rs.POST;

import javax.ws.rs.Path;

import javax.ws.rs.PathParam;

import javax.ws.rs.Produces;

import javax.ws.rs.QueryParam;

import javax.ws.rs.core.MediaType;

@Component         //定義此類為spring組件,即bean類.

@Scope("prototype")   //Spring會針對每一個request請求都生成新的Jersey服務類實例,此方法不需要配置Spring RequsetContextListener

@Path("/restresource")

public class TestRestResource {

1、無參數返回json格式,如返回xml,將Produces參數修改為MediaType.APPLICATION_XML

@GET

@Path("/getUser")

@Produces(MediaType.APPLICATION_JSON)

public User getUser() {  

         User user = new User();  

         user.setUserName("sed");  

         user.setAge(29);  

         return user;  

   }

2、@PathParam("id")獲取URI中指定規則的參數

@GET

@Path("getUser/{id}")

@Produces(MediaType.TEXT_PLAIN)

public String getUserId(@PathParam("id") String id) {

      return id; 

}

3、@QueryParam 用於獲取GET請求中的查詢參數

@GET  

    @Path("getId")  

    @Produces(MediaType.TEXT_PLAIN)  

    public String getId(@QueryParam("id") String id)  

    {  

        return id;  

    }

4、輸入參數為xml格式,輸出為json格式。可以根據需要切換produces和consumes的類型

@POST

@Path("insertUser")

@Produces(MediaType.APPLICATION_JSON)  //指定發送請求的 MIME 類型

@Consumes(MediaType.APPLICATION_XML)  //指定響應所能接受的 MIME 類型

public User insertuser(User user) {

     return user; 

}

5、BeanParam 當請求參數很多時,比如客戶端提交一個修改用戶的PUT請求,請求中包含很多項用戶信息

@PUT

@Path("insertUserFromBean")

@Consumes(MediaType.APPLICATION_JSON)

@Produces(MediaType.APPLICATION_JSON)

public User inserthome(@BeanParam User user) {

return user;

}

6、@FormParam 從POST請求的表單參數中獲取數據

@POST

@Path("insertUserFromForm")

@Consumes("application/x-www-form-urlencoded")

@Produces(MediaType.TEXT_PLAIN)  

public String insertuser(@FormParam("username") String userName, @FormParam("age") int age) {

  User user = new User();

  user.setUserName(userName);

  user.setAge(age);

  return user.toString();

}

7、多參數傳遞

@POST

@Path("map")

@Produces(MediaType.TEXT_PLAIN)

public String getMap(MultivaluedMap<String, String>  formParams) {

  String result = "who:" + formParams.getFirst("who") + " ; what:"+formParams.getFirst("what");

     return formParams.toString();

}

8、

@DELETE

@Path("deleteUser/{id}")

@Produces(MediaType.TEXT_PLAIN)

public String deleteUser(@PathParam("id") String id) {

  //System.out.println(uriInfo.getAbsolutePath().toString());

  return "delete " + id;

}

}

四、客戶端調用

private static WebResource getWr(String USER_URL)  {

             Client c = Client.create();  //創建一個 com.sun.jersey .api.client.Client 類的實例

     WebResource wr = c.resource(USER_URL);  // 建了一個 WebResponse 對象

     return wr;

    }

1、調用getUser

代碼:

String USER_URL = "http://localhost:8000/restful/services/restresource/getUser";

System.out.println(getWr(USER_URL).get(String.class));

輸出:

{"userName":"sed","age":29}

2、調用getUser/{id}

代碼:

String USER_URL = "http://localhost:8000/restful/services/restresource/getUser";

String result = getWr(USER_URL).path("hnsed").get(String.class) ;

System.out.println(result);

輸出:

hnsed

3、調用getId

代碼:

String USER_URL = "http://localhost:8000/restful/services/restresource/getId";

String result = getWr(USER_URL).queryParam("id", "109").get(String.class);

System.out.println(result);

輸出:

109

4、調用insertUser

代碼:

User user = new User();
user.setUserName("hndes");
user.setAge(39);
String USER_URL = " http://localhost:8000/restful/services/restresource/insertUser";
MultivaluedMapImpl params = new MultivaluedMapImpl();
params.add("user", user);
String result = getWr(USER_URL).entity(user,MediaType.APPLICATION_XML).post(String.class);
System.out.println(result);
輸出:
{"userName":"hndes","age":39}
5、調用insertUserFromBean
代碼:
String USER_URL = " http://localhost:8000/restful/services/restresource/insertUserFromBean";
String json = "{\"userName\":\"szh\",\"age\":\"6\"}";
System.out.println(getWr(USER_URL).entity(json,MediaType.APPLICATION_JSON).put(String.class));
輸出:
{"userName":"szh","age":6}

6、調用insertUserFromForm

代碼:

String USER_URL = "http://localhost:8000/restful/services/restresource/insertUserFromForm";

Form form = new Form();

form.add("username", "sed");

form.add("age",39);

//ClientResponse 對象代表了一個客戶端收到的 HTTP 響應。

ClientResponse response = getWr(USER_URL).type(MediaType.APPLICATION_FORM_URLENCODED).post(ClientResponse.class, form);

int status = response.getStatus();   //獲取對應請求的 HTTP 狀態碼

System.out.println(response.getEntity(String.class));

輸出:

name:sed age:39

7、調用map

代碼:

MultivaluedMap<String, String> params = new MultivaluedMapImpl();

params.add("who", "sed");

params.add("what","dohousework");

params.add("how","good");

params.add("where","hk");

params.add("when","long time");

String USER_URL = "http://localhost:8000/restful/services/restresource/map";

String result = getWr(USER_URL).post(String.class,params);

System.out.println(result);

輸出:

{what=[dohousework], how=[good], when=[long time], where=[hk], who=[sed]}

8、調用deleteUser

代碼:

String USER_URL = "http://localhost:8000/restful/services/restresource/deleteUser";

String result = getWr(USER_URL).path("109").delete(String.class);

System.out.println(result);

輸出:

delete 109

注:1、Client 類是創建一個 RESTful Web Service 客戶端的主要配置點。你可以使用它來配置不同的客戶端屬性和功能,並且指出使用哪個資源提供者。創建一個 Client 類的實例是一個比較昂貴的操作,所以盡量避免創建一些不需要的客戶端實例。比較好的方式是盡可能地復用已經存在的實例。

2、通過使用 WebResource 對象來創建要發送到 Web 資源的請求,以及處理從 Web 資源返回的響應。例如,你可以使用 WebResource 對象來發送 HTTP GET、PUT、POST 以及 DELETE 請求

FireShot Capture 1 - jersey spring _ - http___ekekyn.blog.163.com_blog_static_313887320151294452322_ 

 

FireShot Capture 2 - jersey spring _ - http___ekekyn.blog.163.com_blog_static_313887320151294452322_

轉載地址:http://ekekyn.blog.163.com/blog/static/313887320151294452322/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM