PS:いつでも始めることを決めれば遅くはありません。
Spring Boot は Spring アプリケーションの開発を簡素化するためのもので、不要な設定プロセスを減らすことができます。主な特徴には、Spring Boot Starter、自動設定、コマンドラインインターフェース、Actuator などがあります。Android 開発者として Spring Boot を学ぶ際は、使用方法を中心に学びます。すべての文章は対応するケースに基づいています。本記事では、Spring Boot を使用してインターフェースを開発する方法を以下のいくつかの側面から紹介します。
- Spring Boot プロジェクトの初期化
- IDEA を使用して Spring Boot プロジェクトを作成
- Spring Boot プロジェクトのディレクトリ構造
- POM ファイルの概要
- 簡単なインターフェースの実装
- インターフェースのテスト
Spring Boot プロジェクトの初期化#
Spring アプリケーションの作成は Spring Initializr から始まります。プロジェクトの依存関係を迅速に選択でき、https://start.spring.io/
にアクセスして Spring アプリケーションを作成できます。以下の図のように:
設定を通じて対応する設定情報のプロジェクトソースコードパッケージを生成でき、IntelliJ IDEA または他の IDE で開くことができます。
IDEA を使用して Spring Boot プロジェクトを作成#
最も一般的な方法は、IDE を使用して Spring 関連のプロジェクトを作成することです。ここでは IntelliJ IDEA を使用して Spring Boot プロジェクトを作成します。
第一歩:File->New->Project を選択します。以下のように:
第二歩:Spring Initializr を選択し、Project SDK は少なくとも JDK 1.8 で、次に Next を選択します:
第三歩:プロジェクトの設定に基づいてプロジェクト情報を入力し、次に Next を選択します:
第四歩:Web->Spring Web および Spring Boot のバージョンを選択します。このステップでは、実際にはこのプロジェクトに Web 開発をサポートする依存関係を追加しています。後で pom ファイルに関連する依存関係が表示されます。次に Next を選択します:
第五歩:Finish を選択してプロジェクトの作成を完了します:
Spring Boot プロジェクトのディレクトリ構造#
Spring Boot プロジェクトの主なディレクトリ構造は以下の通りです:
│ pom.xml
└─src
├─main
│ ├─java
│ │ └─com
│ │ └─manu
│ │ └─hello
│ │ SpringBootHelloWorldApplication.java
│ │
│ └─resources
│ │ application.properties
│ │
│ ├─static
│ └─templates
└─test
└─java
└─com
└─manu
└─hello
SpringBootHelloWorldApplicationTests.java
主なディレクトリとファイルの説明は以下の通りです:
- pom.xml:プロジェクトは maven の依存関係設定ファイルに基づいています。プロジェクトが gradle に基づいている場合は、対応する gradle ファイルがあります。
- src/main/java:プロジェクトのソースコードディレクトリ。
- src/main/resources:リソースファイルディレクトリ。
- src/test:テストファイルディレクトリ。
- application.properties:設定ファイルで、yml ファイルを使用して設定することもできます。
- static:静的リソースファイルディレクトリ(html、css、js など)。
- templates:テンプレートファイルディレクトリ(Thymeleaf など)。
- SpringBootHelloWorldApplication:プロジェクトの起動クラス。
POM ファイルの概要#
POM はプロジェクトオブジェクトモデル(Project Object Model)の略で、maven プロジェクトは xml を使用してプロジェクト設定を行います。pom.xml は maven プロジェクトの設定に使用され、pom.xml ファイルは Android 開発の build.gradle ファイルに似ています。もちろん、Spring Boot プロジェクトも gradle を使用して構築できます。主にプロジェクトの依存関係を管理し、プロジェクト情報を設定するために使用されます。Spring Web プロジェクトの pom ファイルの内容を見てみましょう:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--pomモデルバージョン -->
<modelVersion>4.0.0</modelVersion>
<!--継承する親プロジェクト-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath /> <!-- リポジトリから親を検索 -->
</parent>
<!--プロジェクト情報-->
<groupId>com.manu</groupId>
<artifactId>spring-boot-hello-world</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--プロジェクトが生成するアーティファクトのタイプ、デフォルトはjar、他にwar、rar、ejb、ear、parなどがあります-->
<packaging>jar</packaging>
<name>spring-boot-hello-world</name>
<description>Spring Boot sample for Hello World!</description>
<!--プロパティ設定-->
<properties>
<java.version>1.8</java.version>
</properties>
<!--依存関係-->
<dependencies>
<!--Webをサポート-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!--ビルド-->
<build>
<!--プラグイン-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
pom ファイルの他の具体的な設定についてはここでは詳しく説明しません。
簡単なインターフェースの実装#
上記の手順に従ってプロジェクトが作成されました。プロジェクトの起動クラスは以下の通りです:
@EnableAutoConfiguration
@ComponentScan
@Configuration
//@SpringBootApplication
public class SpringBootHelloWorldApplication {
public static void main(String[] args) {
// プログラムを起動します。Springコンテナ、内蔵Tomcatなどを含みます。
SpringApplication.run(SpringBootHelloWorldApplication.class, args);
}
}
ここで@SpringBootApplication
は@EnableAutoConfiguration
、@ComponentScan
、@Configuration
を一緒に使用するのと同等で、主に起動クラスの設定に使用されます。ここではこの基盤の上に簡単なインターフェースを実装します。まず、返されるエンティティクラスとしてMessageBean
を作成します。以下のように:
/**
* @Desc: MessageBean
* @Author: jzman
* @Date: 2020/3/6 15:51.
*/
public class MessageBean {
private long id;
private String author;
private String message;
public MessageBean(long id, String author, String info) {
this.id = id;
this.author = author;
this.message = info;
}
// ...
}
次に、対応するコントローラークラスを作成します。ここでの注釈@RestController
はクラスHelloWorldController
をコントローラーとしてマークし、そのクラス内のメソッドの戻り値はページビューではなくオブジェクトに変換されます。これは@Controller
と@ResponseBody
を一緒に使用するのと同等です。
返されるMessageBean
はjson
に変換されます。このプロセスは Spring の HTTP メッセージコンバーターによって自動的にサポートされ、最終的にMappingJackson2HttpMessageConverter
がMessageBean
オブジェクトを対応するjson
形式に変換します。
/**
* @Desc: HelloWorldController
* @Author: jzman
*/
//@Controller
//@ResponseBody
@RestController
public class HelloWorldController {
private final AtomicLong counter = new AtomicLong();
// @RequestMapping(value = "/message", method = RequestMethod.GET)
@GetMapping("/message")
public MessageBean message(@RequestParam(name = "author", defaultValue = "jzman") String author,
@RequestParam(name = "message", defaultValue = "Hello world!") String message) {
return new MessageBean(counter.incrementAndGet(), author, message);
}
}
@RestController
は@Controller
と@ResponseBody
を一緒に使用する効果があり、Controller 内で返されるオブジェクトを対応する形式に変換します。
@Controller
はクラスの注入操作を担当します。ここでは深入りしませんが、Android 開発で Dagger フレームワークを使用したことがある方は、@Controller
の使用を理解するのに役立つでしょう。@ResponseBody
は、返されるオブジェクトを特定の形式に変換することを示します。デフォルトは json 形式です。
@RequestMapping
はアドレスマッピングに使用され、クラスとメソッドの両方で使用できます。クラスで使用する場合、そのクラス内のすべてのリクエストに応答するメソッドはこのパスを親パスとして持ちます。メソッドで使用する場合は、現在応答するパスを示します。上記のコードでは GET リクエストを実装するために@RequestMapping
を使用することも、@GetMapping
を使用することもできます。@GetMapping
は実際にはリクエストメソッドをRequestMethod.GET
にデフォルトで指定しています。さらに、@RequestParam
はリクエストパラメータを設定するために使用されます。
インターフェースのテスト#
SpringBootHelloWorldApplication
を実行し、成功したスクリーンショットは以下の通りです:
以下のインターフェースにアクセスして返されるデータを確認します:
http://localhost:8080/message?author=jzman&message=Hello
返されるデータは以下の通りです:
{"id":3,"author":"jzman","message":"Hello"}
これで、Spring Boot を使用して簡単なインターフェースを実装しました。インターフェースの設定方法は、Android 開発の Retrofit に似ており、注釈を使用して簡単に関連設定を完了できます。