• 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);
        }
    }
  • 相关阅读:
    CSS布局:让页底内容永远固定在底部
    PHP+jQuery实现翻板抽奖
    【数据结构】Java 版本 链表常用操作
    【数据结构】Python3版本 链表常用操作
    Python爬虫学习第一记 (翻译小助手)
    2019年第十届蓝桥杯真题解析JavaC组 A.求和
    2019年第十届蓝桥杯真题解析Java C组 B 矩形切割
    Java 13天基础 06天map集合小练习(黑马程序员) 统计字符串中每个字符出现的次数 (经典面试题)
    2019年第十届蓝桥杯真题解析JavaC组 D: 质数
    Java 9天入门(黑马程序员) 课程收尾 学生管理系统 (9.13)
  • 原文地址:https://www.cnblogs.com/jingyunyb/p/4633077.html
Copyright © 2020-2023  润新知