Restful Jersey-1 入门例子

web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>
    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- REST Services -->
    <servlet>
        <servlet-name>Rest_Servlet</servlet-name>
        <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.zack.rest</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Rest_Servlet</servlet-name>
        <!-- Redirect any calls to our jersey servlet -->
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
</web-app>

 

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.springframework.org/schema/beans" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">

</beans>

 

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>helloworld</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>helloworld Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>

    <!-- Spring 3 dependencies -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>3.0.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>3.0.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>3.0.7.RELEASE</version>
    </dependency>

    <!-- Jersey -->
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.13</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-bundle</artifactId>
        <version>1.13</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-servlet</artifactId>
        <version>1.13</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>
    
    <!--  json-->
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.19</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.13</version>
    </dependency>
    
    
    
    <!-- Jersey + Spring -->
    <dependency>
        <groupId>com.sun.jersey.contribs</groupId>
        <artifactId>jersey-spring</artifactId>
        <version>1.13</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
  </dependencies>
  <build>
    <finalName>helloworld</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version> 
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
                <encoding>UTF8</encoding> 
            </configuration>
        </plugin>
    </plugins>
  </build>
</project>

 

User.java

package com.zack.rest.domain;

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 User() {
        
    }

    public User(String userName,int age) {
        this.userName = userName;
        this.age = age;
    }
    
    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;
    }
}

 

UserResource.java

package com.zack.rest;

import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
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;
import javax.ws.rs.core.MultivaluedMap;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import com.zack.rest.domain.User;

@Component
@Scope("prototype")
@Path("/user")
public class UserResource {

    // 无参数返回json格式,如返回xml,将Produces参数修改为MediaType.APPLICATION_XML
    @GET
    @Path("/showUser")
    @Produces(MediaType.APPLICATION_JSON)
    public User showUser() {
        User user = new User();
        user.setUserName("sed");
        user.setAge(29);
        return user;
    }
    
    @GET
    @Path("/list")
    @Produces(MediaType.APPLICATION_JSON)
    public List<User> list() {
        List<User> userList = new ArrayList<User>();
        userList.add(new User("Lucy",29));
        userList.add(new User("Lily",30));
        return userList;
    }
    

    // @PathParam("id")获取URI中指定规则的参数
    @GET
    @Path("/show/{id}")
    @Produces(MediaType.TEXT_PLAIN)
    public String showByIdOfPath(@PathParam("id") String id) {
        return id;
    }
    
    // @QueryParam 用于获取GET请求中的查询参数
    @GET  
    @Path("/show")  
    @Produces(MediaType.TEXT_PLAIN)  
    public String showByIdOfQuery(@QueryParam("id") String id)  
    {  
        return id;  
    }
    
    // 输入参数为xml格式,输出为json格式。可以根据需要切换produces和consumes的类型
    @POST
    @Path("/add")
    @Consumes(MediaType.APPLICATION_JSON) // 指定响应所能接受的 MIME 类型
    @Produces(MediaType.APPLICATION_JSON) // 指定发送请求的 MIME 类型
    public User add(User user) {
        return user;
    }
    
    // BeanParam 当请求参数很多时,比如客户端提交一个修改用户的PUT请求,请求中包含很多项用户信息
    @PUT
    @Path("/update")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public User update(User user) {
        return user;
    }
    
    // @FormParam 从POST请求的表单参数中获取数据
    @POST
    @Path("/addFromForm")
    @Consumes("application/x-www-form-urlencoded")
    @Produces(MediaType.TEXT_PLAIN)
    public String addFromForm(@FormParam("username") String userName,@FormParam("age") int age) {
        User user = new User();
        user.setUserName(userName);
        user.setAge(age);
        return user.toString();
    }
    
    // 多参数传递
    @POST
    @Path("/multivalued")
    @Produces(MediaType.TEXT_PLAIN)
    public String multivalued(MultivaluedMap<String, String> formParams) {
        String result = "who:" + formParams.getFirst("who") + " ; what:" + formParams.getFirst("what");
        return formParams.toString();
    }    
    
    @DELETE
    @Path("delete/{id}")
    @Produces(MediaType.TEXT_PLAIN)
    public String delete(@PathParam("id") String id) {
        return "delete : " + id;
    }
}

 

UserResourceTest.java

package com.zack.rest;

import static org.junit.Assert.*;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.representation.Form;
import com.sun.jersey.core.util.MultivaluedMapImpl;
import com.zack.rest.domain.User;

public class UserResourceTest {

    @BeforeClass
    public static void beforeClass() throws Exception{
        
    }
    
    @Before
    public void before() throws Exception {
        
    }

    @After
    public void after() throws Exception {
        
    }
    
    @AfterClass
    public static void afterClass() throws Exception{
        
    }
    
    private static WebResource getWebResource(String USER_URL) {
        Client client = Client.create(); // 创建一个 com.sun.jersey .api.client.Client类的实例
        WebResource webResource = client.resource(USER_URL); // 建了一个 WebResponse 对象
        return webResource;
    }
    
    @Ignore
    @Test
    public void testShowUser() {
        String USER_URL = "http://localhost:8080/helloworld/rest/user/showUser";
        System.out.println(getWebResource(USER_URL).get(String.class));
    }

    @Ignore
    @Test
    public void testList() {
        String USER_URL = "http://localhost:8080/helloworld/rest/user/list";
        System.out.println(getWebResource(USER_URL).get(String.class));
    }
    
    @Ignore
    @Test
    public void testShowByIdOfPath() {
        String USER_URL = "http://localhost:8080/helloworld/rest/user/show";
        System.out.println(getWebResource(USER_URL).path("123").get(String.class));
    }

    @Ignore
    @Test
    public void testShowByIdOfQuery() {
        String USER_URL = "http://localhost:8080/helloworld/rest/user/show";
        System.out.println(getWebResource(USER_URL).queryParam("id", "109").get(String.class));
    }

    @Ignore
    @Test
    public void testAdd() {
        User user = new User();
        user.setUserName("Jim");
        user.setAge(39);

        String USER_URL = "http://localhost:8080/helloworld/rest/user/add";
        String result = getWebResource(USER_URL).entity(user,MediaType.APPLICATION_JSON).post(String.class);
        System.out.println(result);
    }

    @Ignore
    @Test
    public void testAdd2() {
        String USER_URL = "http://localhost:8080/helloworld/rest/user/add";
        String userJson = "{\"userName\":\"Jim\",\"age\":\"6\"}";
        String result = getWebResource(USER_URL).entity(userJson,MediaType.APPLICATION_JSON).post(String.class);
        System.out.println(result);
    }
    
    @Ignore
    @Test
    public void testUpdate() {
        String USER_URL = "http://localhost:8080/helloworld/rest/user/update";
        User user = new User();
        user.setUserName("Jim");
        user.setAge(39);
        System.out.println(getWebResource(USER_URL).entity(user,MediaType.APPLICATION_JSON).put(String.class)); 
    }
    
    @Ignore
    @Test
    public void testUpdate2() {
        String USER_URL = "http://localhost:8080/helloworld/rest/user/update";
        String json = "{\"userName\":\"Jim\",\"age\":\"6\"}";
        System.out.println(getWebResource(USER_URL).entity(json,MediaType.APPLICATION_JSON).put(String.class)); 
    }

    @Ignore
    @Test
    public void testAddFromForm() {
        String USER_URL = "http://localhost:8080/helloworld/rest/user/addFromForm";
        Form form = new Form();
        form.add("username", "Jim");
        form.add("age",39);
        //ClientResponse 对象代表了一个客户端收到的 HTTP 响应。
        ClientResponse response = getWebResource(USER_URL).type(MediaType.APPLICATION_FORM_URLENCODED).post(ClientResponse.class, form);
        int status = response.getStatus();   //获取对应请求的 HTTP 状态码
        System.out.println("status:"+status);
        System.out.println(response.getEntity(String.class));
        
    }
    
    @Ignore
    @Test
    public void testMultivalued(){
        MultivaluedMap<String, String> params = new MultivaluedMapImpl();
        params.add("who", "Jim");
        params.add("what","do house work");
        params.add("how","use machine");
        params.add("where","Xue Lang");
        params.add("when","all day");

        String USER_URL = "http://localhost:8080/helloworld/rest/user/multivalued";
        String result = getWebResource(USER_URL).post(String.class,params);
        System.out.println(result);
    }
    
    @Ignore
    @Test
    public void testDelete(){
        String USER_URL = "http://localhost:8080/helloworld/rest/user/delete";
        String result = getWebResource(USER_URL).path("109").delete(String.class);
        System.out.println(result);
    }
}

 

posted on 2015-07-09 14:28  jingyunyb  阅读(696)  评论(1编辑  收藏  举报