Spring bootでREST APIを作ってみた。
Spring boot勉強がてら作成
実装内容
マイナンバーをキーに個人情報を取得してくる的なAPI作成
使用データ
パッケージ構成
├─java
│ └─com
│ └─example
│ └─api
│ └─demo
│ │ DemoApiApplication.java
│ ├─controller
│ │ MPersonalInfoController.java
│ ├─data
│ │ └─dto
│ │ CommonResponse.java
│ │ MPersonalInfoDto.java
│ │ MPersonalInfoErrorDto.java
│ ├─entity
│ │ MPersonalInfo.java
│ │
│ ├─infratructure
│ ├─repository
│ │ MPersonInfoRepository.java
│ ├─service
│ └─usecase
│ │ MPersonalInfoGetListUseCase.java
│ │
│ └─impl
│ MPersonalInfoGetListUseCaseImpl.java
└─resources
application.properties
application.yaml
messages.properties
Controller
・起動のコントロール
UseCase
・処理のInterface
UseCaseImpl
・処理の実装
CommonResponse
・エラーor正常のレスポンスの継承元とすることでレスポンスの振る舞い方を変える
・Dto
正常時のレスポンス
・ErrorDto
異常時のレスポンス
・Repository
JPAを使用したEntity情報取得
・Entity
その名の通り
実装
@RestController
@RequiredArgsConstructor
public class MPersonalInfoController {
private final MPersonalInfoGetListUseCase mPersonalInfoGetListUseCase;
// 個人情報リスト取得
@RequestMapping(value = "/MPersonalInfoListGet", method = RequestMethod.GET)
public ResponseEntity<CommonResponse> MPersonalInfoListGet(@RequestParam(value = "MyNumber",required = false) String myNumber) {
return mPersonalInfoGetListUseCase.mPersonalnfoGetList(myNumber);
}
}
アノテーション
@RestController
WebAPI用のコントローラーに設定する。
Json形式でデータ返却する。
@RequiredArgsConstructor
コンストラクタを使う指定。
(MPersonalInfoGetListUseCaseを指定するために必要)
@RequestMapping
リクエスト URL に対して、どのメソッドが処理を実行するか定義するアノテーション。
URL「/MPersonalInfoListGet」のGETで受け取る。
@RequestParam
ブラウザからのリクエストの値(パラメータ)を取得することができるアノテーション。
「MyNumber」で受け取る。(required = falseでnullを許容する)
@Service
@RequiredArgsConstructor
public class MPersonalInfoGetListUseCaseImpl implements MPersonalInfoGetListUseCase {
private final MPersonInfoRepository mPersonInfoRepository;
private final MessageSource messageSource;
// 個人情報リスト取得API(myNumber)
public ResponseEntity<CommonResponse> mPersonalnfoGetList(String myNumber) {
MPersonalInfoErrorDto mPersonalInfoErrorDto = new MPersonalInfoErrorDto();
try {
if (Objects.isNull(myNumber)) {
var args = new Object[]{"マイナンバー"};
mPersonalInfoErrorDto.setErrorId("W001");
mPersonalInfoErrorDto.setErrorMessage(messageSource.getMessage("Error.api.W001", args, Locale.JAPANESE));
return ResponseEntity.badRequest().body(mPersonalInfoErrorDto);
}
Optional<MPersonalInfo> mPersonalInfo = mPersonInfoRepository.findByMynumber(myNumber);
MPersonalInfoDto mPersonalInfoDto = new MPersonalInfoDto();
// 内部公開してよい個人情報のみ取得
mPersonalInfoDto.setName(mPersonalInfo.get().getName());
mPersonalInfoDto.setAge(mPersonalInfo.get().getAge());
mPersonalInfoDto.setGender(mPersonalInfo.get().getGender());
mPersonalInfoDto.setBloodType(mPersonalInfo.get().getBloodtype());
return ResponseEntity.ok(mPersonalInfoDto);
} catch (Exception e) {
mPersonalInfoErrorDto.setErrorId("E001");
mPersonalInfoErrorDto.setErrorMessage(messageSource.getMessage("Error.api.E001", null, Locale.JAPANESE));
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(mPersonalInfoErrorDto);
}
}
}
アノテーション
@Service
サービス層のクラス(ビジネスロジック等)に付与する。
処理概要
URL「/MPersonalInfoListGet」のGETで受付。
想定パラメータ:MyNumber
入力チェック
・myNuberがNullの場合未入力エラーとする
処理
・myNumberをキーにRepositoryにて、EntityのMPesonalInfoから情報取得
・公開してよい情報のみDtoにセットし返却する。