content: package com.seezoon.framework.api;
  
  import io.swagger.annotations.ApiModel;
  import io.swagger.annotations.ApiModelProperty;
  import lombok.Getter;
  import lombok.Setter;
  
  /**
   * web 层通用返回结果，按照约定，只出现在web层
   *
   * 泛型是为了让swagger 能获取字段信息
   *
   * 默认code = '0' 成功 ，code = '-1' 错误
   *
   * @author hdf
   */
  @ApiModel
  @Getter
  @Setter
  public class Result<T> {
  
      public final static Result SUCCESS = new Result(DefaultCodeMsgBundle.SUCCESS);
  
      @ApiModelProperty("响应码-0成功")
      private String code;
  
      @ApiModelProperty("响应消息")
      private String msg;
  
      @ApiModelProperty("业务字段")
      private T data;
  
      private Result(String code, String msg, Object... args) {
          this.code = code;
          this.msg = (null != args ? String.format(msg, args) : msg);
      }
  
      private Result(CodeMsg codeMsg, Object... args) {
          this(codeMsg.code(), codeMsg.msg(), args);
      }
  
      public static <T> Result<T> ok() {
          return ok(null);
      }
  
      public static <T> Result<T> ok(T data) {
          Result<T> result = new Result(DefaultCodeMsgBundle.SUCCESS);
          result.setData(data);
          return result;
      }
  
      public static <T> Result<T> error(String msg) {
          Result<T> result = new Result<T>(DefaultCodeMsgBundle.FAIL.code(), msg);
          return result;
      }
  
      /**
       * 支持{@link String#format}格式化参数
       *
       * @param code
       * @param msg
       * @param agrs
       * @param <T>
       * @return
       */
      public static <T> Result<T> error(String code, String msg, Object... agrs) {
          Result<T> result = new Result<>(code, msg, agrs);
          return result;
      }
  
      /**
       * 支持{@link String#format}格式化参数
       *
       * @param codeMsg
       * @param agrs
       *            参数
       * @param <T>
       * @return
       */
      public static <T> Result<T> error(CodeMsg codeMsg, Object... agrs) {
          Result<T> result = new Result<T>(codeMsg, agrs);
          return result;
      }
  }
  