Re:ゼロから始めるSpring Boot実践#1 WebBlog開発#6 ユーザ情報更新

に公開

機能一覧※再掲

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

API設計

1.4.1 基本情報

  • リクエストパス:/user/update
  • リクエスト方式:PUT
  • インターフェース説明:このインターフェースは、ログイン中のユーザーの基本情報(アバターとパスワードを除く)を更新するために使用されます。

1.4.2 リクエストパラメータ

  • リクエストパラメータ形式:application/json
  • リクエストデータ例:
{
    "id":5,
    "username":"wangba",
    "nickname":"wb",
    "email":"wb@itcast.cn"
}

API開発

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

1.1 ユーザ情報更新

  • UserControllerにupdateメソッドを作成し、以下の機能を実現
    (1). ユーザ情報を更新するサービスを呼び出し、実行結果を返す。
  • Userviceにupdateメソッドを作成し以下の機能を提供
    (1). ユーザー情報を更新するuserMapperを呼び出し、userエンティティを返す。
  • UserMapperにユーザー情報を更新するメソッドを作成以下のsql文を発行
    (1). update user set nickname=?,email=?,update_time=? where id=?;

2. Controller作成

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

    @PutMapping("/update")
    public Result update(@RequestBody @Validated User user){//@Validatedを使ってエンティティのパラメータを検証する。
        userService.update(user);
        return Result.success();
    }

4. SeriveとMapperの作成

  • UserServiceImplクラスに以下のメソッドを追加
    @Override
    public void update(User user) {
        user.setUpdateTime(LocalDateTime.now());
        userMapper.update(user);
    }
  • UserMapperクラスに以下のメソッドを追加
    // ユーザ情報更新
    @Update("update rezerosb_weblog.user set nickname=#{nickname},email=#{email},update_time=#{updateTime} where id=#{id}")
    void update(User user);

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

入力データのバリデーションを行うためのアノテーションを追加した。

@Data
public class User {
    @NotNull //今回追加した部分。
    private Integer id;//主キーID
    private String username;//ユーザー名
    @JsonIgnore //Json形式に変換される際に、passwordをspringmvcに除外させるため
    private String password;//パスワード

    @NotEmpty //今回追加した部分。
    @Pattern(regexp = "^\\S{1,10}$") //今回追加した部分。
    private String nickname;//Nickname

    @NotEmpty //今回追加した部分。
    @Email //今回追加した部分。
    private String email;//メアド
    private String userPic;//プロフィール写真
    private LocalDateTime createTime;//作成日時
    private LocalDateTime updateTime;//更新日時
}

APIテスト

Postmanでユーザ情報を更新するAPIを実行した後、ユーザ情報を取得するAPIを実行しレスポンスデータを確認する。

Discussion