Jersey的下载地址https://jersey.java.net/。这里下载最新的版本jaxrs-ri-2.6.zip。
- 创建工程
新建一个web工程,引入Jersey所需的jar包。
- 修改web.xml
<servlet> <servlet-name>jersey_rest</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>javax.ws.rs.Application</param-name> <param-value>com.test.ServerApp</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jersey_rest</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping>
由Jersey的Servlet拦截请求,还需要指定一个Application。
- 编写Application类
@ApplicationPath("/rest")
public class ServerApp extends ResourceConfig{
public ServerApp() {
packages("com.test.resource");
}
}
在这个类里面指定加载resource的包。
- 编写Resource类
Resource对应的RESTful对外发布的资源。
@Path("hello")
public class Hello {
@GET
@Path("{id}")
@Produces(value = MediaType.APPLICATION_XML)
public Student getStudent(@PathParam("id") int id) {
Student s = new Student();
s.setId(id);
s.setName("yel");
s.setAddress("aaa");
return s;
}
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(value = MediaType.APPLICATION_XML)
public Student addStudent(@FormParam("name") String name, @FormParam("address") String address) {
Student s = new Student();
s.setId(0);
s.setName(name);
s.setAddress(address);
return s;
}
@PUT
@Consumes(MediaType.APPLICATION_XML)
@Produces(value = MediaType.APPLICATION_XML)
public Student updateStudent(JAXBElement<Student> s) {
return s.getValue();
}
@DELETE
@Path("{id}")
public void deleteStudent(@PathParam("id") int id) {
}
}
@XmlRootElement
public class Student {
private int id;
private String name;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
Hello类对应了需要发布的资源。4个状态分别对应HTTP请求的4种形式。Student类是返回结果,需要用@XmlRootElement注释。
- 客户端调用
GET请求,通过@PathParam获取路径参数,@Produces(value = MediaType.APPLICATION_XML)返回xml
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:8080/HelloWorldServer").path("rest").path("hello").path("1");
Response response = target.request().get();
System.out.println(response.readEntity(String.class));
POST请求,@Consumes(MediaType.APPLICATION_FORM_URLENCODED)指定是表单提交,@FormParam获得表单数据。
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:8080/HelloWorldServer").path("rest").path("hello");
Form form = new Form();
form.param("name", "yel");
form.param("address", "bbbb");
Response response = target.request().post(Entity.entity(form,MediaType.APPLICATION_FORM_URLENCODED_TYPE));
System.out.println(response.readEntity(String.class));
PUT请求,@Consumes(MediaType.APPLICATION_XML)指定是xml提交,JAXBElement<Student> s将xml转换为对象。
Student s = new Student();
s.setId(1);
s.setName("yel");
s.setAddress("bbbbbbb");
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:8080/HelloWorldServer").path("rest").path("hello");
Response response = target.request().put(Entity.xml(s));
System.out.println(response.readEntity(String.class));
DELETE请求
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:8080/HelloWorldServer").path("rest").path("hello/1");
Response response = target.request().delete();
System.out.println(response.readEntity(String.class));