SpringBoot入門:03-統合リクエスト返却


現在、私たちのリターンは直接実体クラスをリクエスト側に投げつけることであり、これは友好的ではなく、統一的なフォーマットがない一方で、リクエスト側がリクエストが成功するかどうか分からないし、判断できるものもないし、説明的なリターンもありません.
本編では、すべてのインタフェースに統一的な友好的なリターンを提供します.
戻り構造の決定
まず、インタフェースが返すフォーマットがどのようなものかを決定し、次のようにします.
{
    "code": 200,
  "msg": "ok",
  "data": ""
}

•codeフィールドはステータスコードを表し、呼び出し元はこのコードに基づいて後続の論理の根拠とする.例えば、code値が200であることは操作成功を表し、論理エラーがなく、この場合、ユーザーに操作成功を提示することができる.code値が200でない場合は、操作に失敗します.たとえば1001で、ユーザー名がすでに存在することを示します.この場合、フロントエンドは対応する操作を行います.
•msgフィールドは、上記のステータスが1001のような追加の説明として使用され、ここでのmsgはusername existsのような説明的な文字であり、呼び出し元のより良い理解を助けることができる.
•dataフィールドは、code値が200の場合、具体的なビジネスデータを返します.配列でもオブジェクトでも構いません.
リターンコードの作成
上記の戻り構造により、codeとmsgフィールドを列挙タイプで統合し、プロジェクトにcommonディレクトリを作成し、ApiCodeを新規作成することができる.JAvaは次のコードで示されています.
package com.foxescap.wxbox.common;

/**
 *        
 * @author xfly
 */
public enum ApiCode {
    /**
     *     
     */
    API_OK(200, "ok"),
    /**
     *       
     */
    API_USERNAME_EXIST(1001, "username exists");

    private final int code;

    private final String msg;

    ApiCode(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public int code() {
        return this.code;
    }

    public String getMsg() {
        return this.msg;
    }
}

その後、異なるエラーコードが1つずつここに追加され、ここの列挙変数が呼び出されます.少し煩わしいかもしれませんが、プロジェクトが大きくなると、ステータスコードを管理することができます.
戻りクラスの作成
プロジェクトにcommonディレクトリを作成し、HttpResponseを新規作成します.JAvaファイル:
package com.foxescap.wxbox.common;

import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.io.Serializable;

/**
 * @author xfly
 * @param 
 */
@Data
@AllArgsConstructor
@JsonPropertyOrder({"code", "msg", "data"})
public class ApiResponse implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     *       
     */
    private int code;

    /**
     *        
     */
    private String msg;

    /**
     *     
     */
    private T data;

    /**
     *     ,   
     *
     * @return      ApiResponse   
     */
    public static ApiResponse success() {
        return new ApiResponse<>(ApiCode.API_OK.code(), ApiCode.API_OK.getMsg(), "");
    }

    /**
     *     ,   
     *
     * @param object     
     * @param           
     * @return      ApiResponse   
     */
    public static  ApiResponse success(T object) {
        return new ApiResponse<>(ApiCode.API_OK.code(), ApiCode.API_OK.getMsg(), object);
    }

    /**
     *     
     *
     * @param apiCode    
     * @return      ApiResponse   
     */
    public static ApiResponse fail(ApiCode apiCode) {
        return new ApiResponse<>(apiCode.code(), apiCode.getMsg(), "");
    }
}

戻りクラスの使用
Controllerのインタフェースの戻りを変更します.エンティティクラスに直接戻るのではなく、戻りクラスにカプセル化して呼び出し元に戻ります.
@GetMapping("/user/{username}")
public ApiResponse findUserByUsername(@PathVariable(name = "username") String username) {
    return ApiResponse.success(userService.findByUsername(username));
}