使用Jersey来创建RESTful WebService

xiaoxiao2021-02-27  442

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的使用。

[html]  view plain  copy <?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_2_5.xsd" id="WebApp_ID" version="2.5">     <display-name>sample</display-name>     <servlet>       <servlet-name>Jersey REST Service</servlet-name>       <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>       <init-param>         <param-name>com.sun.jersey.config.property.packages</param-name>         <param-value>sample</param-value>       </init-param>       <load-on-startup>1</load-on-startup>     </servlet>     <servlet-mapping>       <servlet-name>Jersey REST Service</servlet-name>       <url-pattern>/rest/*</url-pattern>     </servlet-mapping>   </web-app>    上面这个XML是Jersey 1.x版本使用的,现在Jersey已经更新到了2.x版本,如果用Jersey2.x版本,web.xml需要按照http://blog.csdn.net/sdujava2011/article/details/70941256中所述来配置,本文中下面的web.xml同理。

1.4创建Java class

[java]  view plain  copy 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 "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";       }          // This method is called if HTML is request       @GET       @Produces(MediaType.TEXT_HTML)       public String sayHtmlHello() {           return "<html> " + "<title>" + "Hello Jersey" + "</title>"                   + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";       }      }  

1.5.创建测试应用

[java]  view plain  copy 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();       }      }   1.6. 部署项目到tomcat后,运行Test程序:

2.然后来结合JAXB来创建RESTful web service.

JAX-RS可以直接通过JAXB来创建XML和JSON的输出。

JAXB是Java对xml的实现。

2.1 创建叫jersey2的Dynamic Web Project,导入jersey库。

2.2 创建一个对象,这里注意下,加上@XmlRootElement就可以了。

[java]  view plain  copy 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

[java]  view plain  copy 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文件

[html]  view plain  copy <?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_2_5.xsd"       id="WebApp_ID" version="2.5">       <display-name>sample</display-name>       <servlet>           <servlet-name>Jersey REST Service</servlet-name>           <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>           <init-param>               <param-name>com.sun.jersey.config.property.packages</param-name>               <param-value>sample</param-value>           </init-param>           <load-on-startup>1</load-on-startup>       </servlet>       <servlet-mapping>           <servlet-name>Jersey REST Service</servlet-name>           <url-pattern>/rest/*</url-pattern>       </servlet-mapping>   </web-app>   

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等方法就行了。

本文转自http://blog.csdn.net/starshus/article/details/22644249,所有权力归原作者所有。

转载请注明原文地址: https://www.6miu.com/read-1806.html

最新回复(0)