😺

Re:ゼロから始めるSpring Boot実践#1 WebBlog開発#4 ユーザ情報取得

に公開

機能一覧※再掲

  1. ユーザ
    1.1 新規登録
    1.2 ログイン
    1.3 ユーザ情報取得 ← 本記事の内容
    1.4 ユーザ情報更新
    1.5 アバター画像変更
    1.6 パスワード変更
  2. 記事カテゴリ
  3. 記事管理

API設計

1.2 ログイン

1.2.1 基本情報

リクエストパス:/user/info
リクエスト方式:GET
インターフェース概要:このインターフェースはログインに使用される。

1.2.2 リクエストパラメータ

リクエストパラメータ形式:x-www-form-urlencoded

リクエストデータ例:

```json
{
    "code": 0,
    "message": "処理成功",
    "data": {
        "id": 5,
        "username": "山田",
        "nickname": "",
        "email": "",
        "userPic": "",
        "createTime": "2023-09-02 22:21:31",
        "updateTime": "2023-09-02 22:21:31"
    }
}

API開発

1. 開発するメソッド・クラスを考える

1.1 ユーザ情報取得

  • UserControllerにuserinfoメソッドを作成し、以下の機能を実現
    (1). ユーザー名を用いてユーザを検索し、userエンティティを返す。
  • UserviceにfindeByUsernameメソッドを作成し以下の機能を提供
    (1). ユーザー名を用いてユーザを検索
  • UserMapperにユーザ名検索メソッドを作成以下のsql文を発行
    (1). select * from user where username=?;

2. Controller作成

UserControllerクラスに以下のメソッドを追加

    @GetMapping("/userInfo")
    public Result<User> userInfo(@RequestHeader(name="Authorization") String token){

        Map<String, Object> map = JwtUtil.parseToken(token);
        String username = (String) map.get("username");
        User user = userService.findByUserName(username);
        return Result.success(user);
    }

4. SeriveとMapperの作成

UserServiceImplには、findByUserNameメソッドはは作成済みのため作業不要。

5. Userエンティティクラスの修正

レスポンスデータからpasswordを消すために、passwaord変数に @JsonIgnoreを付ける。

@Data
public class User {
    private Integer id;//主キーID
    private String username;//ユーザー名
    @JsonIgnore //Json形式に変換される際に、passwordをspringmvcに除外させるため
    private String password;//パスワード
    private String nickname;//Nickname
    private String email;//メアド
    private String userPic;//プロフィール写真
    private LocalDateTime createTime;//作成日時
    private LocalDateTime updateTime;//更新日時
}

6. Mybatisの設定を更新

DBのカラム命名とJavaの命名規則が違うため、自動変換できるようにした。
これを入れないと、createTimeとupdateTimeのデータがnullになってしまう。

mybatis:
  configuration:
    map-underscore-to-camel-case: true #スネークケースからキャメルケースへの自動変換を有効にする。

APIテスト

PostmanでログインAPIを叩いて、ユーザ情報を取得できるかを確認。

Discussion