LoginSignup
0
3

More than 3 years have passed since last update.

Spring BootでRESTなサービスを作ったときの備忘録

Last updated at Posted at 2020-09-28

概要

STSを使ってSpring WebでRESTなサービスを使ったときの備忘録を残しておきます。
主に自分用。
Spring Webとは、Spring Frameworkをベースにした
Webアプリケーションフレームワークです。

開発環境は次の通りです。
OS : Windows 7 Home Edition 64bit
Java : JavaSE 8 update 181
Spring Boot : 2.3.4
STS : 4.6.1

STSのセットアップ

STSのセットアップは自分の備忘録を参考にしました。

プロジェクトの作成

Create new Spring Starter Projectでプロジェクト作成、
参照したライブラリは以下の通りです。

  • Spring Web
  • Spring Data JPA
  • Oracle Driver
  • Lombok

アプリケーションの作成

作成したクラス、設定ファイル、用意したデータは次の通りです。

Spring Bootアプリケーション起動時の実行クラスです。

SpringWebSampleApplication.java
package jp.co.illmatics;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringWebSampleApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringWebSampleApplication.class, args);
	}

}

REST APIとなるクラスです。

REST APIにするために@RestControllerを、
CORSでアクセス権を付与するために@CrossOrigin
それぞれ付与しました。

取得できる値はJSON形式となります。
値の詳細は後程説明します。

UsersController.java
package jp.co.illmatics.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import jp.co.illmatics.dao.UserDao;
import jp.co.illmatics.model.User;

@CrossOrigin
@RestController
public class UsersController {

	@Autowired
	private UserDao userInfoDao;

	@RequestMapping(method = RequestMethod.GET, value = "/users")
	public List<User> get() {
		return userInfoDao.getUserInfoList();
	}
}

Data Access Objectです。
実装時にはインターフェースとその実装クラスの両方が必要です。

UserDao.java
package jp.co.illmatics.dao;

import java.util.List;

import jp.co.illmatics.model.User;

public interface UserDao {

	public List<User> getUserInfoList();
}

UserDaoの実装クラスです。
Userのリストを取得するメソッドを定義します。
IDカラム昇順で全件取得します。

UserDaoImpl.java
package jp.co.illmatics.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import jp.co.illmatics.model.User;

@Repository
public class UserDaoImpl implements UserDao {

	@Autowired
	private JdbcTemplate jdbcTemplate;

	public List<User> getUserInfoList() {
		List<User> list = jdbcTemplate.query("select * from USER_INFO ORDER BY ID"
			, new Object[] {},
			new RowMapper<User>() {
				public User mapRow(ResultSet rs, int rowNum) throws SQLException {
					User user = new User();
					user.setId(rs.getString("ID"));
					user.setName(rs.getString("NAME"));
					user.setAge(rs.getInt("AGE"));
					return user;
				}
			});
		return list;
	}
}

USER_INFOテーブルのモデルクラスです。

User.java
package jp.co.illmatics.model;

import javax.persistence.Table;

import org.springframework.stereotype.Component;

import lombok.Data;

@Data
@Component
@Table(name = "USER_INFO")
public class User {

	private String id;

	private String name;
	
	private Integer age;

}

テストデータを格納したDB接続情報です。

application.properties
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=xxxxxx
spring.datasource.password=xxxxxx
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
spring.jpa.show-sql=true

作成したテーブルです。
※USERというテーブル名は予約語のため作成できず、
このような名前にしています。

作成したテーブル
create table USER_INFO (
  "ID" varchar2(20), 
  "NAME" varchar2(20), 
  "AGE" number(3,0), 
  constraint "PK_USER" primary key ("ID")
);

USER_INFOテーブルに用意したデータです。

ID NAME AGE
user001 userName001 35
user002 userName002 30
user003 userName003 25

動作確認

実行してみます。
できました。
実行結果.PNG

以上です。最後までお読みいただき、ありがとうございました。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3