Heim  >  Artikel  >  Java  >  Wie SpringBoot die einheitliche Kapselung implementiert und die Front-End-Ergebnismenge zurückgibt

Wie SpringBoot die einheitliche Kapselung implementiert und die Front-End-Ergebnismenge zurückgibt

王林
王林nach vorne
2023-05-12 17:25:061887Durchsuche

Wie fassen wir dieses Ergebnis zusammen? Wir sollten auf die Informationen achten, die in den an das Frontend zurückgegebenen Daten enthalten sind.

Im Allgemeinen muss dieses Mal zunächst ein Code vorhanden sein, der den Status der Schnittstelle darstellt. Beispielsweise bedeutet 0 Erfolg, 1 bedeutet Fehler, 2 bedeutet, dass falsche Parameter übergeben werden mussten, 4 bedeutet Systemausnahme und so weiter. Dies ist nur ein einfaches Beispiel. Viele Menschen haben möglicherweise Fragen. Das HTTP-Protokoll selbst verfügt bereits über entsprechende Rückgabecodedefinitionen. Beispiel: 200 bedeutet Erfolg, 500 bedeutet Serverfehler, 404 bedeutet, dass die Seite nicht gefunden wurde.

Zum Beispiel gibt 200 an, dass die Anfrage erfolgreich war, kann aber nicht die Geschäftsergebnisse in der Anfrage beschreiben. Wenn beispielsweise der Benutzername bereits vorhanden ist, ist das Geschäft tatsächlich nicht erfolgreich, aber das HTTP-Ergebnis ist definitiv 200, sodass wir einen Code zur Beschreibung unseres Geschäftsstatus benötigen.

Zusätzlich zum Code gibt es auch einige Eingabeaufforderungsmeldungen, z. B. erfolgreiche Operation, Systemausnahme, Benutzername ist bereits vorhanden usw., daher haben wir ein Nachrichtenfeld hinzugefügt.

Dazu kommen noch unsere Kerndaten. Ich erhalte beispielsweise Daten basierend auf der ID. Der spezifische Inhalt dieser Daten muss an das Frontend zurückgegeben werden, daher müssen Daten vorhanden sein. Welcher Typ wird für diese Daten verwendet? Dieser Typ muss vielfältig sein, daher müssen wir eine einheitliche übergeordnete Klasse verwenden, damit das Objekt alle Typen empfangen kann. Natürlich können wir einige allgemeine Methoden verwenden, um die Bedienung zu erleichtern.

Dann sind da noch unsere Kerndaten. Ich erhalte zum Beispiel Daten basierend auf der ID. Der spezifische Inhalt dieser Daten muss an das Frontend zurückgegeben werden, daher müssen Daten vorhanden sein. Welcher Typ wird für diese Daten verwendet? Dieser Typ muss vielfältig sein, daher müssen wir eine einheitliche übergeordnete Klasse verwenden, damit das Objekt alle Typen empfangen kann. Natürlich können wir allgemeine Methoden verwenden, um die Bedienung zu erleichtern.

Hauptcodeanzeige:

public class Result<T> implements Serializable {
   private static final long serialVersionUID = -3960261604608758516L;
  private int code;
  private String msg;
  private T data;
  public static <T> Result<T> success() {
        return new Result<>();
    }
 
    /**
     * 成功,默认状态码,返回消息,自定义返回数据
     * @param data 自定义返回数据
     * @param <T>  返回类泛型,不能为String
     * @return 通用返回Result
     */
    public static <T> Result<T> success(T data) {
        return new Result<>(data);
    }
 
     /**
     * 成功,默认状态码,自定义返回消息,返回数据
     * @param msg  自定义返回消息
     * @param data 自定义返回数据
     * @param <T>  返回类泛型
     * @return 通用返回Result
     */
    public static <T> Result<T> success(String msg, T data) {
        return new Result<>(msg, data);
    }
           /**
     * 成功,默认状态码,自定义返回消息,无返回数据
     *
     * @param msg 自定义返回消息
     * @param <T> 返回类泛型
     * @return 通用返回Result
     */
    public static <T> Result<T> success(String msg) {
        return new Result<>(msg);
    }
     /**
     * 失败,默认状态码,返回消息,无返回数据
     * @param <T> 返回类泛型
     * @return 通用返回Result
     */
    public static <T> Result<T> error() {
        return new Result<>(ResultCode.ERROR);
    }
     /**
     * 失败,默认状态码,自定义返回消息,无返回数据
     * @param <T> 返回类泛型
     * @return 通用返回Result
     */
    public static <T> Result<T> error(String msg) {
        return new Result<>(ResultCode.ERROR.getCode(), msg);
    }
     /**
     * 失败,自定义状态码,返回消息,无返回数据
     * @param code 自定义状态码
     * @param msg  自定义返回消息
     * @param <T>  返回类泛型
     * @return 通用返回Result
     */
    public static <T> Result<T> error(int code, String msg) {
        return new Result<>(code, msg);
    }
     /**
     * 失败,使用CodeMsg状态码,返回消息,无返回数据
      * @param resultCode CodeMsg,参数如下:
     *                   <p> code 状态码
     *                   <p> msg  返回消息
     * @param <T>        返回类泛型
     * @return 通用返回Result
     */
    public static <T> Result<T> error(ResultCode resultCode) {
        return new Result<>(resultCode);
    }
     /**
     * 成功构造器,无返回数据
     */
    private Result() {
        this(ResultCode.SUCCESS);
    }
     /**
     * 成功构造器,自定义返回数据
     * @param data 返回数据
     */
    private Result(T data) {
        this(ResultCode.SUCCESS, data);
    }
     /**
     * 成功构造器,自定义返回消息,无返回数据
     * @param msg 返回消息
     */
    private Result(String msg) {
        this(ResultCode.SUCCESS.getCode(), msg);
    }
           /**
     * 构造器,自定义状态码,返回消息
     * @param code 状态码
     * @param msg  返回消息
     */
    private Result(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
     /**
     * 成功构造器,自定义返回信息,返回数据
     * @param msg  返回信息
     * @param data 返回数据
     */
    private Result(String msg, T data) {
        this(ResultCode.SUCCESS.getCode(), msg, data);
    }
 
    /**
     * 构造器,自定义状态码,返回消息,返回数据
     * @param code 状态码
     * @param msg  返回消息
     * @param data 返回数据
     */
    private Result(int code, String msg, T data) {
        this(code, msg);
        this.data = data;
    }
            /**
     * 构造器,使用CodeMsg状态码与返回信息,自定义返回数据
     * @param resultCode CodeMsg,参数如下:
     *                   <p> code 状态码
     *                   <p> msg  返回消息
     * @param data       返回数据
     */
    private Result(ResultCode resultCode, T data) {
        this(resultCode);
        this.data = data;
    }
  
    /**
     * 构造器,使用CodeMsg状态码与返回信息
     * @param resultCode CodeMsg,参数如下:
     *                   <p> code 状态码
     *                   <p> msg  返回消息
     */
    private Result(ResultCode resultCode) {
        this(resultCode.getCode(), resultCode.getMsg());
    }
 
}

Sie müssen auch mehrere häufige Fehler definieren

@Builder
public class ResultCode implements Serializable {
     private static final long serialVersionUID = -6269841958947880397L;
     /** 状态码*/
    private int code;
     /**状态信息*/
    private String msg;
     /** 默认成功*/
    public final static ResultCode SUCCESS = dispose(ResultCodeEnum.SUCCESS);
    /**默认失败*/
   public final static ResultCode ERROR = dispose(ResultCodeEnum.ERROR);
    /**通用业务异常*/
    public final static ResultCode BIZ_ERROR = dispose(ResultCodeEnum.BIZ_ERROR);
    /**文件超出最大限制*/
    public final static ResultCode FILE_OUT_MAX = dispose(ResultCodeEnum.FILE_OUT_MAX);
    /**文件格式不正确*/
    public final static ResultCode FILE_FORMAT_ERROR = dispose(ResultCodeEnum.FILE_FORMAT_ERROR);
    /** 参数错误*/
    public final static ResultCode PARAM_ERROR = dispose(ResultCodeEnum.PARAM_ERROR);
    /**Json解析异常*/
    public final static ResultCode JSON_FORMAT_ERROR = dispose(ResultCodeEnum.JSON_FORMAT_ERROR);
    /** Sql解析异常*/
    public final static ResultCode SQL_ERROR = dispose(ResultCodeEnum.SQL_ERROR);
    /**网络超时*/
    public final static ResultCode NETWORK_TIMEOUT = dispose(ResultCodeEnum.NETWORK_TIMEOUT);
    /** 未知的接口*/
    public final static ResultCode UNKNOWN_INTERFACE = dispose(ResultCodeEnum.UNKNOWN_INTERFACE);
    /**请求方式不支持*/
    public final static ResultCode REQ_MODE_NOT_SUPPORTED = dispose(ResultCodeEnum.REQ_MODE_NOT_SUPPORTED);
    /**系统异常*/
    public final static ResultCode SYS_ERROR = dispose(ResultCodeEnum.SYS_ERROR);
    private static ResultCode dispose(ResultCodeEnum codeEnum) {
        return ResultCode.builder().code(codeEnum.getCode()).msg(codeEnum.getMsg()).build();
    }
     public ResultCode(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
}

Das obige ist der detaillierte Inhalt vonWie SpringBoot die einheitliche Kapselung implementiert und die Front-End-Ergebnismenge zurückgibt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen