SpringでRestfulなプロジェクトの作り方

ほしがき2017/09/09(土) - 15:28 に投稿

Spring Frameworkを使ってRestFulなプロジェクトを作ります。

@RestControllerの使い方とかはよく見かけるんだけどプロジェクトの作り方とか探すの大変だったので残します。

環境

Spring Framework 4.3.10.RELEASE

Java 8

jackson 2.9.0

tomcat 9.0

eclipse 4.7 Oxygen

 

  • eclipseにSTS(Spring Tool Suite)インストール

ヘルプ→Eclipseマーケットプレイス

「spring sts」で検索し、画像の1番上のやつインストールします。

指示に従ってインストールして、再起動を求められるので再起動します。

spring sts

 

  • Springのプロジェクトを作成

再起動が完了したらパッケージエクスプローラで右クリック→新規→その他

Spring > Spring レガシー・プロジェクトを選択します。

springレガシープロジェクト

 

プロジェクト名を入力して「Spring MVC Project」を選択

Spring MVC Project

 

パッケージ名を入力

ここでは「spring.rest.test」としました。

デフォルトで作成されるプロジェクトは微妙に古いので新し目な感じに変更していきます。

ビルドパスを開いてjdkを1.8に変更します

プロジェクトファセットも以下のように変更します。

プロジェクトファセット

 

pom.xmlも同様にバージョンを更新します。

Springのバージョンについてはデフォルトの3.1.1.RELEASEのままだと@RestController(後述)が使えないので注意です

あとはJSONを扱うためJacksonもここに追加します。

Jackson忘れるとエラーになるので気を付けましょう(Spring RestでNestedServletExceptionが出るときの対処)

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>spring.rest</groupId>
    <artifactId>test</artifactId>
    <name>SpringRest</name>
    <packaging>war</packaging>
    <version>1.0.0-BUILD-SNAPSHOT</version>
    <properties>
        <java-version>1.8</java-version>
        <org.springframework-version>4.3.10.RELEASE</org.springframework-version>
        <org.aspectj-version>1.8.10</org.aspectj-version>
        <org.slf4j-version>1.7.25</org.slf4j-version>
        <jackson-version>2.9.0</jackson-version>
    </properties>
    <dependencies>
    <!-- 省略 -->
    
        <!-- JSON -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jackson-version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson-version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson-version}</version>
        </dependency>
    <!-- 省略 -->
</project>

 

  • @RestControllerを使ってクラス作成

次はRestなクラスを作ります。

JSONで受けてJSONで返します。

デフォルトで作成されているHomeController.javaはいらないので消しましょう。

jspも不要です(\SpringRest\src\main\webapp\WEB-INF\views\home.jsp)

以下のようにクラスにアノテーションを付与することで簡単にRestなクラスができるのは大変便利です。

ついでにメソッドも追加します。今回はブラウザから簡単に確認できるようにGETメソッドを使用します。

@RequestMappingのvalueはURLのパス、methodはHTTPメソッドです。

 

RestTest.java

 

package spring.rest.test;
import java.util.HashMap;
import java.util.Map;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RestTest {
    @RequestMapping(value="/rest_get", method = RequestMethod.GET)
    public Map<String, Object> restGetMethod() {
        Map<String, Object> map = new HashMap<>();
        map.put("json", "だよ");
        return map;
    }
}

 

あとはTomcat等で起動させてブラウザでアクセスするだけです。

http://localhost:8080/test/rest_get

http://localhost:8080/test/rest_test

 

  • 余談

http://localhost:8080/のうしろの「/test/」を変更したい場合は

プロジェクトを右クリック→プロパティ→Webプロジェクトの設定

コンテキストルートを/test/から例えば/rest/にするとURLを変更することができます。

変更するとhttp://localhost:8080/rest/rest_getでアクセス可能になります。

※サーバをクリーンしないと反映されないので注意

 

  • 続きみたいな記事

Spring Rest + HTMLでWebアプリケーション構築

こちらはWebアプリの作り方です。

HTML+JSとJSONの組み合わせで構築していきます。

 

 

タグ