0
0

Spring bootでREST APIを作ってみた。

Posted at

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

image.png

Controller
・起動のコントロール

UseCase
・処理のInterface

UseCaseImpl
・処理の実装

CommonResponse
・エラーor正常のレスポンスの継承元とすることでレスポンスの振る舞い方を変える

・Dto
正常時のレスポンス

・ErrorDto
異常時のレスポンス

・Repository
JPAを使用したEntity情報取得

・Entity
その名の通り

実装

DemoApiApplication.java
@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を許容する)

DemoApiApplication.java
@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にセットし返却する。

0
0
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
0