😕

【備忘録】Java SpringBoot 取っ掛かり

2025/02/08に公開

導入

JavaのSpringBootを利用することはそこそこ多いが、新規で作成する際、毎回同じことを検索していることが多いので、ほぼ自分用に備忘録を作成することにしました。
今回は、とりあえずプロジェクトを作成して「プレゼンテーション層」と「ビジネスロジック層」の2つについて記載します。
※データアクセス層は後日作成予定

実装

やりたいこと

「プレゼンテーション層」と「ビジネスロジック層」の2つをメインで行うので以下が処理できるような超簡単なものを目標にしておきます。

  • 新しくプロジェクトを作成してからRest APIとしてリクエストを受け取る
  • エラーが起きたときに共通の処理を行う
  • 独自の例外を作成する

開発環境

以下の開発環境で今回は実施しています。

  • Eclipse 2024
  • Java 17
  • Spring Boot 3.3.4

VSCodeは普段使うことが多いですが、Javaだけとか試すだけとかであればEclipseの方が圧倒的に楽だと思っています。
サイトからダウンロードさえしてしまえば、JDKを個別に入れたり、環境変数にPathを通したりと環境構築でありがちな割と面倒な作業もないからです。
ただVSCodeに比べ起動するのに時間がかかったりしますが、そこそこのスペックがあるPCを利用していれば、ぶっちゃけストレスがたまるほど遅いってこともないです。
そして個人的にEclipseを使っていて楽なのがメニューで大抵の操作ができること(ビルドやデバッグなどなど)が良い!楽しすぎると少しソースコードが書けるだけの人になるので気を付けてください。。(自分が過去そうでした)
※長々とすみません、個人的な意見なので気にしないもらえると幸いです。

ソースコード

プレゼンテーション層

DemoController.java
@RestController
@RequestMapping("/demo")
public class DemoController {
	@Autowired
	private IDemoService demoService; 
	
	@PostMapping("/exception")
	public ResponseEntity<String> exception() throws DemoException {
		try {
			demoService.hoge();
		} catch (DemoException dex) {
			throw dex;
		}
		return new ResponseEntity<String>("this process is success", HttpStatus.OK);
	}
}

ビジネスロジック層

IDemoService.java
public interface IDemoService {
	public String hoge() throws DemoException;
}
DemoService.java
@Service
public class DemoService implements IDemoService {
	public String hoge() throws DemoException {
		/**
		 * 何かしらの処理
		 */
		throw new DemoException("this process is failed");
	}
}

エラーハンドリング

一旦、Exceptionクラスを継承した独自の例外クラスを作成します。

DemoException.java
public class DemoException extends Exception {
	public DemoException() {
	}
	public DemoException(String message) {
		super(message);
	}
	public DemoException(Throwable cause) {
		super(cause);
	}
	public DemoException(String message, Throwable cause) {
		super(message, cause);
	}
}

Controllerクラスから例外が投げられたときに実行するエラー処理を共通化します。

  • クラスに @ControllerAdvice アノテーションを付与
  • エラー処理を行うメソッドに @ExceptionHandler アノテーションでDemoException.classを指定
DemoExceptionHandler.java
@ControllerAdvice
public class DemoExceptionHandler {
	@ExceptionHandler(DemoException.class)
	public ResponseEntity<String> handleDemoException(DemoException ex) {
		return new ResponseEntity<String>(ex.getMessage(), HttpStatus.BAD_REQUEST);
	}
}

※他の例外でも実施したときも同様に実装

Discussion