package org.yzh.commons.model; 
 | 
  
 | 
import com.fasterxml.jackson.annotation.JsonView; 
 | 
import io.swagger.v3.oas.annotations.media.Schema; 
 | 
import org.yzh.commons.util.StrUtils; 
 | 
  
 | 
/** 
 | 
 * @author yezhihao 
 | 
 * https://gitee.com/yezhihao/jt808-server 
 | 
 */ 
 | 
public class APIResult<T> { 
 | 
  
 | 
    public static final APIResult SUCCESS = new ImmutableAPIResult<>(new APIResult<>()); 
 | 
    public static final APIResult Unauthorized = new ImmutableAPIResult<>(new APIResult<>(APICodes.Unauthorized)); 
 | 
    public static final APIResult NotPermission = new ImmutableAPIResult<>(new APIResult<>(APICodes.NotPermission)); 
 | 
  
 | 
    public interface View { 
 | 
    } 
 | 
  
 | 
    @JsonView(View.class) 
 | 
    @Schema(description = "响应码(成功:200;客户端错误:400-499;服务端错误:500-599)") 
 | 
    protected int code; 
 | 
    @JsonView(View.class) 
 | 
    @Schema(description = "响应消息") 
 | 
    protected String msg; 
 | 
    @JsonView(View.class) 
 | 
    @Schema(description = "响应消息详情") 
 | 
    protected String detailMsg; 
 | 
    @JsonView(View.class) 
 | 
    @Schema(description = "响应数据") 
 | 
    protected T data; 
 | 
  
 | 
    public APIResult() { 
 | 
        this.code = APICodes.Success.getCode(); 
 | 
        this.msg = APICodes.Success.getMessage(); 
 | 
    } 
 | 
  
 | 
    public APIResult(Exception e) { 
 | 
        this.code = APICodes.UnknownError.getCode(); 
 | 
        this.msg = e.getMessage(); 
 | 
        this.detailMsg = StrUtils.getStackTrace(e); 
 | 
    } 
 | 
  
 | 
    public APIResult(APICode code, Exception e) { 
 | 
        this.code = code.getCode(); 
 | 
        this.msg = code.getMessage(); 
 | 
        this.detailMsg = e.getMessage(); 
 | 
    } 
 | 
  
 | 
    public APIResult(APIException e) { 
 | 
        this.code = e.getCode(); 
 | 
        this.msg = e.getMessage(); 
 | 
        this.detailMsg = e.getDetailMessage(); 
 | 
    } 
 | 
  
 | 
    public APIResult(APICode code) { 
 | 
        this.code = code.getCode(); 
 | 
        this.msg = code.getMessage(); 
 | 
    } 
 | 
  
 | 
    public APIResult(APICode code, String message) { 
 | 
        this.code = code.getCode(); 
 | 
        this.msg = message; 
 | 
    } 
 | 
  
 | 
    public APIResult(APICode code, String message, String detailMsg) { 
 | 
        this.code = code.getCode(); 
 | 
        this.msg = message; 
 | 
        this.detailMsg = detailMsg; 
 | 
    } 
 | 
  
 | 
    public APIResult(T t) { 
 | 
        this(APICodes.Success, t); 
 | 
    } 
 | 
  
 | 
    public APIResult(APICode code, T data) { 
 | 
        this(code); 
 | 
        this.data = data; 
 | 
    } 
 | 
  
 | 
    public APIResult(int code, String msg) { 
 | 
        this.code = code; 
 | 
        this.msg = msg; 
 | 
    } 
 | 
  
 | 
    public static <T> APIResult<T> ok(T data) { 
 | 
        return new APIResult<>(data); 
 | 
    } 
 | 
  
 | 
    public boolean isSuccess() { 
 | 
        return APICodes.Success.getCode() == code; 
 | 
    } 
 | 
  
 | 
    public int getCode() { 
 | 
        return code; 
 | 
    } 
 | 
  
 | 
    public void setCode(int code) { 
 | 
        this.code = code; 
 | 
    } 
 | 
  
 | 
    public String getMsg() { 
 | 
        return msg; 
 | 
    } 
 | 
  
 | 
    public void setMsg(String msg) { 
 | 
        this.msg = msg; 
 | 
    } 
 | 
  
 | 
    public String getDetailMsg() { 
 | 
        return detailMsg; 
 | 
    } 
 | 
  
 | 
    public void setDetailMsg(String detailMsg) { 
 | 
        this.detailMsg = detailMsg; 
 | 
    } 
 | 
  
 | 
    public T getData() { 
 | 
        return data; 
 | 
    } 
 | 
  
 | 
    public void setData(T data) { 
 | 
        this.data = data; 
 | 
    } 
 | 
  
 | 
    public static final class ImmutableAPIResult<T> extends APIResult<T> { 
 | 
  
 | 
        public ImmutableAPIResult(APIResult<T> that) { 
 | 
            this.code = that.code; 
 | 
            this.msg = that.msg; 
 | 
            this.detailMsg = that.detailMsg; 
 | 
            this.data = that.data; 
 | 
        } 
 | 
  
 | 
        @Override 
 | 
        public void setCode(int code) { 
 | 
            throw new UnsupportedOperationException(); 
 | 
        } 
 | 
  
 | 
        @Override 
 | 
        public void setMsg(String msg) { 
 | 
            throw new UnsupportedOperationException(); 
 | 
        } 
 | 
  
 | 
        @Override 
 | 
        public void setDetailMsg(String detailMsg) { 
 | 
            throw new UnsupportedOperationException(); 
 | 
        } 
 | 
  
 | 
        @Override 
 | 
        public void setData(T data) { 
 | 
            throw new UnsupportedOperationException(); 
 | 
        } 
 | 
    } 
 | 
} 
 |