RESTful Web Service是轻量级的service,可以通过HTTP的方式来实现对后台数据库的CRUD,
在Web开发和移动开发时使用的比较广泛,非常方便。
在Java世界里, JAX-RS规范定义了对RESTful Web Service的实现。
Oracle的Jersey框架则是对JAX-RS的一个实现。
下面我们学习如何使用Jersey来创建RESTful WebService。
我的开发环境:
Eclipse Juno, Java 1.6, Tomcat 7.0, Jersey 1.18
1. 创建第一个RESTful web service
1.1创建一个叫jersey1的Dynamic Web Project.
1.2在WEB-INF/lib文件夹中导入jersey的包。
1.3创建web.xml,定义Jersey的使用。
sample
Jersey REST Service
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
sample
1
Jersey REST Service
/rest/*
1.4创建Java class
package sample;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
//Sets the path to base URL + /hello
@Path("/hello")
public class Hello {
// This method is called if TEXT_PLAIN is request
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello() {
return "Hello Jersey";
}
// This method is called if XML is request
@GET
@Produces(MediaType.TEXT_XML)
public String sayXMLHello() {
return "" + " Hello Jersey" + " ";
}
// This method is called if HTML is request
@GET
@Produces(MediaType.TEXT_HTML)
public String sayHtmlHello() {
return " " + "" + "Hello Jersey" + " "
+ "" + "Hello Jersey" + "
" + " ";
}
}
1.5.创建测试应用
package sample;
import java.net.URI;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
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.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
public class Test {
public static void main(String[] args) {
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource service = client.resource(getBaseURI());
// Fluent interfaces
System.out.println(service.path("rest").path("hello")
.accept(MediaType.TEXT_PLAIN).get(ClientResponse.class)
.toString());
// Get plain text
System.out.println(service.path("rest").path("hello")
.accept(MediaType.TEXT_PLAIN).get(String.class));
// Get XML
System.out.println(service.path("rest").path("hello")
.accept(MediaType.TEXT_XML).get(String.class));
// The HTML
System.out.println(service.path("rest").path("hello")
.accept(MediaType.TEXT_HTML).get(String.class));
}
private static URI getBaseURI() {
return UriBuilder.fromUri(
"http://localhost:8080/jersey1").build();
}
}
2.然后来结合JAXB来创建RESTful web service.
JAX-RS可以直接通过JAXB来创建XML和JSON的输出。
JAXB是Java对xml的实现。
2.1 创建叫jersey2的Dynamic Web Project,导入jersey库。
2.2 创建一个对象,这里注意下,加上@XmlRootElement就可以了。
package sample;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Todo {
private String summary;
private String description;
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
2.3 创建一个class来调用jersey
package sample;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/todo")
public class TodoResource {
// This method is called if XMLis request
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Todo getXML() {
Todo todo = new Todo();
todo.setSummary("This is my first todo");
todo.setDescription("This is my first todo");
return todo;
}
// This can be used to test the integration with the browser
@GET
@Produces({ MediaType.TEXT_XML })
public Todo getHTML() {
Todo todo = new Todo();
todo.setSummary("This is my first todo");
todo.setDescription("This is my first todo");
return todo;
}
}
2.4 web.xml文件
sample
Jersey REST Service
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
sample
1
Jersey REST Service
/rest/*
2.5 部署项目,然后通过浏览器来测试
输入url: http://localhost:8080/jersey2/rest/todo
可以看到RESTful web service的输出:
为了更清楚一点,我用Chrome浏览器的Postman来测试一下,这是一个RESTful的客户端。
小结:
可以看到在Java中,可以通过JAX-RS+JAXB非常方便的实现RESTful web service。
直接在对象中定义url以及get,post,put,delete等方法就行了。