Restful-first-application

提供:Dev Guides
移動先:案内検索

RESTful Webサービス-最初のアプリケーション

Jerseyフレームワークを使用して、実際のRESTful Webサービスの作成を始めましょう。 Jerseyフレームワークを使用して最初の例を書き始める前に、リンク:/restful/restful_environment [RESTful Web Services-Environment Setup]の章で説明されているように、Jersey環境が適切にセットアップされていることを確認する必要があります。 ここでは、Eclipse IDEの実用的な知識があることも前提としています。

それでは、ユーザーのリストを表示するWebサービスメソッドを公開する簡単なJerseyアプリケーションの作成に進みましょう。

Javaプロジェクトの作成

最初のステップは、Eclipse IDEを使用して動的Webプロジェクトを作成することです。 [ファイル]→[新規]→[プロジェクト]オプションを選択し、最後にウィザードリストから[動的Webプロジェクト]ウィザードを選択します。 次のスクリーンショットに示すように、ウィザードウィンドウを使用して、プロジェクトに UserManagement という名前を付けます-

ダイナミックWebプロジェクトウィザード

プロジェクトが正常に作成されると、 Project Explorer に次のコンテンツが表示されます-

ユーザー管理ディレクトリ

必要なライブラリを追加する

次のステップとして、Jersey Frameworkとその依存関係(ライブラリ)をプロジェクトに追加します。 プロジェクトのWEB-INF/libディレクトリにあるダウンロードjersey zipフォルダーの次のディレクトリからすべてのjarをコピーします。

  • \ jaxrs-ri-2.17 \ jaxrs-ri \ api
  • \ jaxrs-ri-2.17 \ jaxrs-ri \ ext
  • \ jaxrs-ri-2.17 \ jaxrs-ri \ lib

ここで、プロジェクト名 UserManagement を右クリックし、コンテキストメニューで利用可能なオプション-*ビルドパス→ビルドパスの設定*に従って、Javaビルドパスウィンドウを表示します。

ここで、 Libraries タブにある Add JARs ボタンを使用して、WEBINF/libディレクトリにあるJARを追加します。

ソースファイルの作成

*UserManagement* プロジェクトの下に実際のソースファイルを作成しましょう。 まず、 *com.finddevguides* というパッケージを作成する必要があります。 これを行うには、パッケージエクスプローラーセクションでsrcを右クリックし、オプション- *New→Package* に従います。

次に、com.finddevguidesパッケージの下に UserService.java、User.java、UserDao.java ファイルを作成します。

*User.java*
package com.finddevguides;

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;
   }
}
*UserDao.java*
package com.finddevguides;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

public class UserDao {
   public List<User> getAllUsers(){

      List<User> userList = null;
      try {
         File file = new File("Users.dat");
         if (!file.exists()) {
            User user = new User(1, "Mahesh", "Teacher");
            userList = new ArrayList<User>();
            userList.add(user);
            saveUserList(userList);
         }
         else{
            FileInputStream fis = new FileInputStream(file);
            ObjectInputStream ois = new ObjectInputStream(fis);
            userList = (List<User>) ois.readObject();
            ois.close();
         }
      } catch (IOException e) {
         e.printStackTrace();
      } catch (ClassNotFoundException e) {
         e.printStackTrace();
      }
      return userList;
   }
   private void saveUserList(List<User> userList){
      try {
         File file = new File("Users.dat");
         FileOutputStream fos;
         fos = new FileOutputStream(file);
         ObjectOutputStream oos = new ObjectOutputStream(fos);
         oos.writeObject(userList);
         oos.close();
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}
*UserService.java*
package com.finddevguides;

import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/UserService")

public class UserService {
   UserDao userDao = new UserDao();
   @GET
   @Path("/users")
   @Produces(MediaType.APPLICATION_XML)
   public List<User> getUsers(){
      return userDao.getAllUsers();
   }
}

メインプログラムに関して注意すべき重要なポイントが2つあります。

UserService.java

  • 最初のステップは、UserServiceへの@Pathアノテーションを使用して、Webサービスのパスを指定することです。
  • 2番目の手順は、UserServiceのメソッドへの@Pathアノテーションを使用して、特定のWebサービスメソッドのパスを指定することです。

Web.xml構成ファイルの作成

XMLファイルであり、アプリケーションのJerseyフレームワークサーブレットを指定するために使用されるWeb xml構成ファイルを作成する必要があります。

*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">
   <display-name>User Management</display-name>
   <servlet>
      <servlet-name>Jersey RESTful Application</servlet-name>
      <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
      <init-param>
         <param-name>jersey.config.server.provider.packages</param-name>
         <param-value>com.finddevguides</param-value>
      </init-param>
   </servlet>
   <servlet-mapping>
      <servlet-name>Jersey RESTful Application</servlet-name>
      <url-pattern>/rest/*</url-pattern>
   </servlet-mapping>
</web-app>

プログラムの展開

ソースおよびWeb構成ファイルの作成が完了したら、プログラムをコンパイルして実行するこのステップの準備が整います。 これを行うには、Eclipseを使用して、アプリケーションをwarファイルとしてエクスポートし、tomcatにデプロイします。

Eclipseを使用してWARファイルを作成するには、 File→export→Web→War File オプションに従って、最後にプロジェクトUserManagementと宛先フォルダーを選択します。 Tomcatにwarファイルをデプロイするには、UserManagement.warを* Tomcatインストールディレクトリ→webappsディレクトリ*に配置し、Tomcatを起動します。

プログラムを実行する

Chromeの拡張機能であるhttps://www.getpostman.com/[Postman]を使用して、Webサービスをテストしています。

UserManagementにリクエストを行って、すべてのユーザーのリストを取得します。 GETリクエストでPOSTMANにhttp://localhost:8080/UserManagement/rest/UserService/usersを配置すると、次の結果が表示されます。

RESTful API、すべてのユーザー

おめでとうございます、最初のRESTfulアプリケーションが正常に作成されました。