Java中的RESTful Web服务示例

时间:2020-02-23 14:35:33  来源:igfitidea点击:

在本教程中,我们将在Eclipse中使用泽西岛使用Java开发RESTful Web服务示例

Java API用于RESTful Web服务(JAX-RS),是一个用于开发人员REST服务的API。
JAX-RS是Java EE6的一部分,使开发人员能够轻松开发REST Web应用程序。

泽西是本规范的参考实施。
泽西州基本上包含REST服务器和一个REST客户端。
核心客户端可以使用jersey lib与服务器通信。

在服务器侧泽时使用扫描预定义类的servlet来识别RESTful资源。
通过Web.xml配置文件的Web应用程序。

此servlet的基本URL是:

http://your_domain:port/display-name/url-pattern/path_from_rest_class 

此Servlet分析传入的HTTP请求,并根据请求选择正确的类和方法。
此选择基于类别和方法中提供的注释。

让我们在Java中看到RESTful Web服务示例。

准备工作:

  • Java SE 6.
  • 从此位置下载泽西州的Zip - https://jersey.java.net/download.html
  • Eclipse IDE

1)打开Eclipse。
2)创建名为"RestfulWebServiceExample"的新动态Web项目

3)现在转到我们下载泽西队的位置,然后转到Jersey-Archive-1.17-> lib文件夹。
我们可以拥有所有的jar,但现在我们可以在jars下复制

  • ASM-3.1
  • 泽西 - 客户-1117
  • Jersey-Core-1.17
  • 泽西服务器-1.17
  • Jersey-servlet-1.17
  • JSR311-API-1.1.1

所有上面的粘贴到WebContent-> Web-Inf-> lib复制jar

将所有这些jar添加到Eclipse构建路径。

右键单击项目(RESTFULWSERVICEEXAMPLE) - >属性

单击Java Build Path,然后添加jar,如上图所示。

转到Project-> WebContent-> Web-Inf-> lib并选择所有jar,然后单击确定。

单击"添加到类路径"的"确定"JARS。
4)创建名为"org.igi.javapostssforlearning.webservice"的新包

5)创建Feettoinchandinchtofeetconversionservice。

java.

package org.igi.javapostsforlearning.webservices;
 
/**
* @author igi Mandliya
*/
 
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
 
@Path("ConversionService")
public class FeetToInchAndInchToFeetConversionService {
	
	 @GET
     @Path("/InchToFeet/{i}")
      @Produces(MediaType.TEXT_XML)
      public String convertInchToFeet(@PathParam("i") int i) {
 
        int inch=i;
        double feet = 0;
        feet =(double) inch/12;
      
        return "<InchToFeetService>"
        + "<Inch>" + inch + "</Inch>"
          + "<Feet>" + feet + "</Feet>"
         + "</InchToFeetService>";
      }
 
      @Path("/FeetToInch/{f}")
      @GET
      @Produces(MediaType.TEXT_XML)
      public String convertFeetToInch(@PathParam("f") int f) {
    	  int inch=0;
          int feet = f;
          inch = 12*feet;
   
          return "<FeetToInchService>"
            + "<Feet>" + feet + "</Feet>"
            + "<Inch>" + inch + "</Inch>"
            + "</FeetToInchService>";
      }
      
      
}

@path(/your_path_at_class_level):将路径设置为基本URL +/your_path_at_class_Level。
基本URL基于应用程序名称,servlet和web.xml"配置文件的URL模式。

@path(/your_path_at_method_level):将路径设置为base url +/your_path_at_class_level +/your_path_at_method_level

@Produces(Mediatype.text_xml [,more-types]):@produces定义了用@get注释的方法传递的mime类型。
在示例文本中,生成了"text/xml")。

@PathParam:用于将来自URL的值注入方法参数。
此方法在ConvertFeetToinch方法中注入英寸并将其转换为脚。

6)现在我们需要创建Web.xml并将其放在/RESTFULWBServiceExample/WebContent/Web-Inf /

<!--?xml version="1.0" encoding="UTF-8"?-->
<?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>RESTfulWebServiceExample</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>org.igi.javapostsforlearning.webservices</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>

在上面,请放置Web服务包。

8)运行项目:右键单击项目 - >运行AS - >在服务器上运行

9)测试休息服务下:"http://localhost:8080/restfulwebserviceexample/rest/conversionservice/feettoinch/2"。

我们将获得输出:

如果我们看到Web服务信息页面然后完成。

创建RESTFUL Web服务客户端:

在org.igi.javapostssforlearning.websevices.client下创建ConversionserviceClient.java.java.websevices.Client

package org.igi.javapostsforlearning.webservices.client;
 
import javax.ws.rs.core.MediaType;
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 ConversionServiceClient {
	static final String REST_URI = "http://localhost:8080/RESTfulWebServiceExample";
	static final String INCH_TO_FEET = "/ConversionService/InchToFeet/";
	static final String FEET_TO_INCH = "/ConversionService/FeetToInch/";
 
	public static void main(String[] args) {
 
		int inch=12;
		int feet=2;
 
		ClientConfig config = new DefaultClientConfig();
		Client client = Client.create(config);
		WebResource service = client.resource(REST_URI);
 
		WebResource addService = service.path("rest").path(INCH_TO_FEET+inch);
		System.out.println("INCH_TO_FEET Response: " + getResponse(addService));
		System.out.println("INCH_TO_FEET Output as XML: " + getOutputAsXML(addService));
		System.out.println("---------------------------------------------------");
 
		WebResource subService = service.path("rest").path(FEET_TO_INCH+feet);
		System.out.println("FEET_TO_INCH Response: " + getResponse(subService));
		System.out.println("FEET_TO_INCH Output as XML: " + getOutputAsXML(subService));
		System.out.println("---------------------------------------------------");
 
	}
 
	private static String getResponse(WebResource service) {
		return service.accept(MediaType.TEXT_XML).get(ClientResponse.class).toString();
	}
 
	private static String getOutputAsXML(WebResource service) {
		return service.accept(MediaType.TEXT_XML).get(String.class);
	}
}

运行上面的程序输出:

INCH_TO_FEET Response: GET http://localhost:8080/RESTfulWebServiceExample/rest/ConversionService/InchToFeet/12 returned a response status of 200 OK
INCH_TO_FEET Output as XML: 121.0
--------------------------------------------------
FEET_TO_INCH Response: GET http://localhost:8080/RESTfulWebServiceExample/rest/ConversionService/FeetToInch/2 returned a response status of 200 OK
FEET_TO_INCH Output as XML: 224
--------------------------------------------------