一、环境
jdk7 + Eclipse + Tomcat7 + jersey2
二、服务端
1、 新建Web项目,导入jersey+jackson相应的jar包;
2、 新建User、UserDao、UserService这三个类,代码如下:
User.java
package com.rest.server;
import java.io.Serializable;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "user")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private String name;
private String profession;
public User() {
}
public User(int id, String name, String profession) {
this.id = id;
this.name = name;
this.profession = profession;
}
public int getId() {
return id;
}
@XmlElement
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
public String getProfession() {
return profession;
}
@XmlElement
public void setProfession(String profession) {
this.profession = profession;
}
}
UserDao.java
package com.rest.server;
import java.util.ArrayList;
import java.util.List;
public class UserDao {
private static List<User> users = new ArrayList<User>();
static {
users.add(new User(1, "zhangfei", "student"));
users.add(new User(2, "zhugeliang", "teacher"));
users.add(new User(3, "kongming", "teacher"));
users.add(new User(4, "likui", "student"));
}
public List<User> getAllUsers() {
return users;
}
public User getUserById(int id) {
if (users.isEmpty() || id <= 0) {
return null;
}
return users.get(id - 1);
}
public void deleteUserById(int id) {
if (users.isEmpty() || id <= 0) {
return;
}
users.remove(id - 1);
}
public void addUser(User user) {
if (user == null) {
return;
}
users.add(user);
}
}
UserService.java
package com.rest.server;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
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.core.MediaType;
@Path("/UserService")
public class UserService {
UserDao userDao = new UserDao();
// add
@POST
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public void createUser(User user) {
userDao.addUser(user);
}
// delete
@DELETE
@Path("{id}")
public void deleteUser(@PathParam("id") String id) {
userDao.deleteUserById(Integer.valueOf(id));
}
// alter
@PUT
@Consumes(MediaType.APPLICATION_XML)
public void updateUser(User user) {
userDao.addUser(user);
}
// query
@GET
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public List<User> getAllUsers() {
return userDao.getAllUsers();
}
// query by id
@GET
@Path("/getUser?id={id}")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public User getUser(@PathParam("id") String id) {
return userDao.getUserById(Integer.valueOf(id));
}
}
3、新建RestApplication.java,初始化配置信息,代码如下:
package com.rest;
import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
import org.glassfish.jersey.server.ResourceConfig;
/**
* 模块说明:初始化配置、指定服务所在的包、同时注册json转换器
*
*/
public class RestApplication extends ResourceConfig {
public RestApplication() {
packages("com.rest.server");
register(JacksonJsonProvider.class);
}
}
4、配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>User Management</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Jersey RESTful Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<!-- <init-param> <param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.rest.server</param-value> </init-param> -->
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.rest.RestApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey RESTful Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
5、使用Eclipse将项目打成war包部署到Tomcat,启动服务器。(也可在IDE内部启动服务器)
6、在浏览器输入http://localhost:8080/UserManagement/rest/UserService, 可查看运行结果。
三、客户端
1、使用jersey提供的client包进行客户端开发,基于win7操作系统。
2、导入jersey+jackson相应的jar包;
3、创建UserClient.java,代码如下:
package com.rest.client;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
import org.glassfish.jersey.client.ClientConfig;
/**
* 模块说明: 使用jersey client调用restfult web service
*
*/
public class UserClient {
private static final String uri = "http://localhost:8080/UserManagement/rest";
private static final String path = "/UserService";
private static WebTarget webTarget = null;
public static void main(String[] args) {
addUser();
queryUsers();
delUser("1");
queryUsers();
updateUser();
queryUsers();
queryById("3");
}
// 添加用户
private static void addUser() {
System.out.println("添加新用户:");
User user = new User(5, "chengjisihan", "student");
Invocation.Builder invocationBuilder = getWebTarget().request();
Response response = invocationBuilder.buildPost(Entity.entity(user, MediaType.APPLICATION_JSON)).invoke();
response.close();
}
// 删除用户
private static void delUser(String id) {
System.out.println("删除用户:");
Invocation.Builder invocationBuilder = getWebTarget().path("/" + id).request();
Response response = invocationBuilder.delete();
response.close();
}
// 更新用户
private static void updateUser() {
System.out.println("更新用户:");
User user = new User(6, "lishimin", "teacher");
Invocation.Builder builder = getWebTarget().request();
Response response = builder.buildPut(Entity.entity(user, MediaType.APPLICATION_JSON)).invoke();
response.close();
}
// 根据id查询用户
private static void queryById(String id) {
System.out.println("根据id=" + id + "查找用户:");
Invocation.Builder builder = getWebTarget().path("/getUser?id=" + id).request();
Response response = builder.get();
System.out.println(response);
User user = response.readEntity(User.class);
System.out.println(user.getId() + " " + user.getName() + " " + user.getProfession());
response.close();
}
// 查询所有用户
private static void queryUsers() {
System.out.println("查找所有商户:");
Invocation.Builder builder = getWebTarget().request();
Response response = builder.get();
String value = response.readEntity(String.class);
System.out.println(value);
response.close();
}
private static WebTarget getWebTarget() {
if (webTarget == null) {
// 客户端配置信息
ClientConfig clientConfig = new ClientConfig();
clientConfig.register(JacksonJsonProvider.class);
// 创建客户端
Client client = ClientBuilder.newClient(clientConfig);
webTarget = client.target(uri).path(path);
}
return webTarget;
}
}
4、运行结果如下(仅供参考):
添加新用户:
查找所有商户:
[{"id":1,"name":"zhangfei","profession":"student"},{"id":2,"name":"zhugeliang","profession":"teacher"},{"id":3,"name":"kongming","profession":"teacher"},{"id":4,"name":"likui","profession":"student"},{"id":5,"name":"chengjisihan","profession":"student"}]
删除用户:
查找所有商户:
[{"id":2,"name":"zhugeliang","profession":"teacher"},{"id":3,"name":"kongming","profession":"teacher"},{"id":4,"name":"likui","profession":"student"},{"id":5,"name":"chengjisihan","profession":"student"}]
更新用户:
查找所有商户:
[{"id":2,"name":"zhugeliang","profession":"teacher"},{"id":3,"name":"kongming","profession":"teacher"},{"id":4,"name":"likui","profession":"student"},{"id":5,"name":"chengjisihan","profession":"student"}]
根据id=3查找用户:
InboundJaxrsResponse{context=ClientResponse{method=GET, uri=http://localhost:8080/UserManagement/rest/UserService/getUser%3Fid=3, status=200, reason=OK}}
4 likui student