您的位置:首页 > 其它

Restful Jersey-1 入门例子

2015-07-09 14:28 211 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: