jersey实现Restful的一个小
说明:了解了一下jersey
这个demo也是我在9月份从网上抄写的,找了好多,忘了记转载地址。。。所以先行说声抱歉!!!
环境: jdk1.7、eclipse
server服务:
目录结构图
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是自己导出的,没有做什么分辨
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方法,即可!!!