jersey实现Restful的一个小

说明:了解了一下jersey
这个demo也是我在9月份从网上抄写的,找了好多,忘了记转载地址。。。所以先行说声抱歉!!!
环境: jdk1.7、eclipse

server服务:

目录结构图

jersey实现Restful的一个小

pox.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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.test.jerseyServers</groupId>
  <artifactId>jerseyServers</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <dependencies>
		<dependency>
			<groupId>org.glassfish.jersey.containers</groupId>
			<artifactId>jersey-container-servlet</artifactId>
			<version>2.17</version>
		</dependency>
		<dependency>
			<groupId>org.glassfish.jersey.core</groupId>
			<artifactId>jersey-client</artifactId>
			<version>2.17</version>
		</dependency>
		<dependency>
			<groupId>org.glassfish.jersey.media</groupId>
			<artifactId>jersey-media-json-jackson</artifactId>
			<version>2.17</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-core-asl -->
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-core-asl</artifactId>
			<version>1.9.0</version>
		</dependency>

		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-jaxrs</artifactId>
			<version>1.9.0</version>
		</dependency>

	</dependencies>
</project>

user.java

package com.jsd.vo;

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;
    }
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", profession="
				+ profession + "]";
	}   
}

userDao.java

package com.jsd.vo;
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
实现了POST、DELETE、PUT、GET等请求

package com.jsd.vo;
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
    @Path("/all")
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public void createUser(User user) {
    	System.out.println("进入连接添加用户");
    	System.out.println(user.toString());
        userDao.addUser(user);
    }
    // delete
    @DELETE
    @Path("/{id}")
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public void deleteUser(@PathParam("id") String id) {
        userDao.deleteUserById(Integer.valueOf(id));
    }
    // alter
    @PUT
    @Consumes(MediaType.APPLICATION_XML)
    public void updateUser(User user) {
    	System.out.println("增加");
        userDao.addUser(user);
    }
    // query
    @GET
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public List<User> getAllUsers() {
    	System.out.println("查询所有");
        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) {
    	System.out.println("查询单个"+id);
        return userDao.getUserById(Integer.valueOf(id));
    }
}

RestApplication.java
jersey的注册,扫描的包等!!!

package com.jsd.vo;
import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
import org.glassfish.jersey.server.ResourceConfig;

/**
 * 模块说明:初始化配置、指定服务所在的包、同时注册json转换器
 * 
 */
public class RestApplication extends ResourceConfig {
    public RestApplication() {
 //扫描某一个包,因为是一个demo,所以把文件创在了同一个包下。。。
        packages("com.jsd.vo");
//        注册json
        register(JacksonJsonProvider.class);
    }
}

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" 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">
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</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>javax.ws.rs.Application</param-name>
      <!-- 扫描注册类来进行声明 -->
      <param-value>com.jsd.vo.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>

至此已经完成server端的demo

client并没有集成spring等一些操作,只是一个简单的java Project 其中jar是自己导出的,没有做什么分辨
jersey实现Restful的一个小
user.java

package clientt;
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;
    }
}

clienttest.java

package clientt;
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;

public class clienttest {

	
		private static String uri = "http://localhost:8080/server/rest";
		private static String path = "UserService/all";
		private static Client client;

		static {
			// 客户端配置信息
			ClientConfig clientConfig = new ClientConfig();
			clientConfig.register(JacksonJsonProvider.class);
			// 创建客户端
			client = ClientBuilder.newClient(clientConfig);
		}
		public static void main(String[] args) {
			User u = new User(5,"zhangyushuai","ssss");
			Response post = client.target(uri).path(path).request().buildPost(Entity.entity(u, MediaType.APPLICATION_XML)).invoke();
					System.out.println(post);
			System.out.println("结束");
			post.close();
			client.close();
		}
}

要注意的是uri的编写,因为在server的web.xm里面配置过

<servlet-name>Jersey RESTful Application</servlet-name>
    <!-- 配置路径 -->
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>

所以这里的uri需要加上 /rest/ 这里也是重点

最后,在tomcat里面先行启动server
然后运行client中的main方法,即可!!!