xiejun
2024-11-01 80b6cbfc9c861469146318d0b3dd5f8b8b525b8a
Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/api/R.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,225 @@
/*
 *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: Chill åº„骞 (smallchill@163.com)
 */
package org.springblade.core.tool.api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import org.springblade.core.tool.constant.BladeConstant;
import org.springblade.core.tool.utils.ObjectUtil;
import org.springframework.lang.Nullable;
import javax.servlet.http.HttpServletResponse;
import java.io.Serializable;
import java.util.Optional;
/**
 * ç»Ÿä¸€API响应结果封装
 *
 * @author Chill
 */
@Getter
@Setter
@ToString
@ApiModel(description = "返回信息")
@NoArgsConstructor
public class R<T> implements Serializable {
   private static final long serialVersionUID = 1L;
   @ApiModelProperty(value = "状态码", required = true)
   private int code;
   @ApiModelProperty(value = "是否成功", required = true)
   private boolean success;
   @ApiModelProperty(value = "承载数据")
   private T data;
   @ApiModelProperty(value = "返回消息", required = true)
   private String msg;
   private R(IResultCode resultCode) {
      this(resultCode, null, resultCode.getMessage());
   }
   private R(IResultCode resultCode, String msg) {
      this(resultCode, null, msg);
   }
   private R(IResultCode resultCode, T data) {
      this(resultCode, data, resultCode.getMessage());
   }
   private R(IResultCode resultCode, T data, String msg) {
      this(resultCode.getCode(), data, msg);
   }
   private R(int code, T data, String msg) {
      this.code = code;
      this.data = data;
      this.msg = msg;
      this.success = ResultCode.SUCCESS.code == code;
   }
   /**
    * åˆ¤æ–­è¿”回是否为成功
    *
    * @param result Result
    * @return æ˜¯å¦æˆåŠŸ
    */
   public static boolean isSuccess(@Nullable R<?> result) {
      return Optional.ofNullable(result)
         .map(x -> ObjectUtil.nullSafeEquals(ResultCode.SUCCESS.code, x.code))
         .orElse(Boolean.FALSE);
   }
   /**
    * åˆ¤æ–­è¿”回是否为成功
    *
    * @param result Result
    * @return æ˜¯å¦æˆåŠŸ
    */
   public static boolean isNotSuccess(@Nullable R<?> result) {
      return !R.isSuccess(result);
   }
   /**
    * è¿”回R
    *
    * @param data æ•°æ®
    * @param <T>  T æ³›åž‹æ ‡è®°
    * @return R
    */
   public static <T> R<T> data(T data) {
      return data(data, BladeConstant.DEFAULT_SUCCESS_MESSAGE);
   }
   /**
    * è¿”回R
    *
    * @param data æ•°æ®
    * @param msg  æ¶ˆæ¯
    * @param <T>  T æ³›åž‹æ ‡è®°
    * @return R
    */
   public static <T> R<T> data(T data, String msg) {
      return data(HttpServletResponse.SC_OK, data, msg);
   }
   /**
    * è¿”回R
    *
    * @param code çŠ¶æ€ç 
    * @param data æ•°æ®
    * @param msg  æ¶ˆæ¯
    * @param <T>  T æ³›åž‹æ ‡è®°
    * @return R
    */
   public static <T> R<T> data(int code, T data, String msg) {
      return new R<>(code, data, data == null ? BladeConstant.DEFAULT_NULL_MESSAGE : msg);
   }
   /**
    * è¿”回R
    *
    * @param msg æ¶ˆæ¯
    * @param <T> T æ³›åž‹æ ‡è®°
    * @return R
    */
   public static <T> R<T> success(String msg) {
      return new R<>(ResultCode.SUCCESS, msg);
   }
   /**
    * è¿”回R
    *
    * @param resultCode ä¸šåŠ¡ä»£ç 
    * @param <T>        T æ³›åž‹æ ‡è®°
    * @return R
    */
   public static <T> R<T> success(IResultCode resultCode) {
      return new R<>(resultCode);
   }
   /**
    * è¿”回R
    *
    * @param resultCode ä¸šåŠ¡ä»£ç 
    * @param msg        æ¶ˆæ¯
    * @param <T>        T æ³›åž‹æ ‡è®°
    * @return R
    */
   public static <T> R<T> success(IResultCode resultCode, String msg) {
      return new R<>(resultCode, msg);
   }
   /**
    * è¿”回R
    *
    * @param msg æ¶ˆæ¯
    * @param <T> T æ³›åž‹æ ‡è®°
    * @return R
    */
   public static <T> R<T> fail(String msg) {
      return new R<>(ResultCode.FAILURE, msg);
   }
   /**
    * è¿”回R
    *
    * @param code çŠ¶æ€ç 
    * @param msg  æ¶ˆæ¯
    * @param <T>  T æ³›åž‹æ ‡è®°
    * @return R
    */
   public static <T> R<T> fail(int code, String msg) {
      return new R<>(code, null, msg);
   }
   /**
    * è¿”回R
    *
    * @param resultCode ä¸šåŠ¡ä»£ç 
    * @param <T>        T æ³›åž‹æ ‡è®°
    * @return R
    */
   public static <T> R<T> fail(IResultCode resultCode) {
      return new R<>(resultCode);
   }
   /**
    * è¿”回R
    *
    * @param resultCode ä¸šåŠ¡ä»£ç 
    * @param msg        æ¶ˆæ¯
    * @param <T>        T æ³›åž‹æ ‡è®°
    * @return R
    */
   public static <T> R<T> fail(IResultCode resultCode, String msg) {
      return new R<>(resultCode, msg);
   }
   /**
    * è¿”回R
    *
    * @param flag æˆåŠŸçŠ¶æ€
    * @return R
    */
   public static <T> R<T> status(boolean flag) {
      return flag ? success(BladeConstant.DEFAULT_SUCCESS_MESSAGE) : fail(BladeConstant.DEFAULT_FAILURE_MESSAGE);
   }
}