springboot项目统一响应结果封装

本文详细介绍了SpringBoot项目中如何实现统一的响应结果封装,包括注解+AOP方式,ResponseBodyAdvice方式,以及简化的和改进的响应结果封装方法。涉及到响应处理注解、响应结果基类和扩展类、全局拦截处理、接口过滤、结果码定义、异常处理等多个方面。
摘要由CSDN通过智能技术生成

springboot项目统一响应结果封装

一、通过注解+AOP方式实现
1、定义响应处理注解
(1)不处理响应结果- IgnoreResponseAdvice注解
@Target({
   ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface IgnoreResponseAdvice {
   

}
(2)处理响应结果-ResponseAdvice注解
@Inherited
@Target({
   ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ResponseAdvice {
   

}
2、响应结果封装基类以及扩展类
(1)响应结果基础类-BaseResponse
@Data
public class BaseResponse {
   
    protected int code; //返回码
    protected String message; //返回消息
    public BaseResponse() {
   
        // 默认创建成功的回应
        this(CommonResponseEnum.SUCCESS);
    }
    public BaseResponse(ResponseEnum ResponseEnum) {
   
        this(ResponseEnum.getCode(), ResponseEnum.getMessage());
    }
    public BaseResponse(int code, String message) {
   
        this.code = code;
        this.message = message;
    }
}
(2)通用响应结果封装类-CommonResponse
@Data
@EqualsAndHashCode(callSuper = true)
public class CommonResponse<T> extends BaseResponse {
   
   protected T data; //数据
   public CommonResponse() {
   
      super();
   }
   public CommonResponse(T data) {
   
      super();
      this.data = data;
   }
   public CommonResponse(int code, String message) {
   
      super(code, message);
   }
}
(3)响应结果包装类R类
  • 作用是封装泛型类型结果
public class R<T> extends CommonResponse<T> {
   
    public R() {
   }
    public R(T data) {
   
        this.data = data;
    }
    public R(T data, String msg) {
   
        this.data = data;
        this.message = msg;
    }
    public R(Throwable e) {
   
        this.message = e.getMessage();
        this.code = -1;
    }
    public R(int code, String message) {
   
        super(code, message);
    }
    public String toString() {
   
        return "R(super=" + super.toString() + ")";
    }
    public boolean equals(Object o) {
   
        if (o == this) {
   
            return true;
        } else if (!(o instanceof R)) {
   
            return false;
        } else {
   
            R<?> other = (R)o;
            if (!other.canEqual(this)) {
   
                return false;
            } else {
   
                return super.equals(o);
            }
        }
    }
    protected boolean canEqual(Object other) {
   
        return other instanceof R;
    }
    public int hashCode() {
   
        int result = super.hashCode();
        return result;
    }
}
(4)响应结果分页封装类PR类
public class PR<T> extends PageDataResponse<T> {
   
    public PR() {
   }
    public PR(PageData<T> data) {
   
        super(data);
    }
    public String toString() {
   
        return "PR()";
    }
}
(5)分页类-PageData
public class PageData<T> {
   
    @ApiModelProperty("数据列表")
    private List<T> records;
    @ApiModelProperty("总记录数")
    private long totalCount;
    @ApiModelProperty("当前页,从1开始")
    private long pageNo;
    @ApiModelProperty("分页大小")
    private long pageSize;

    public PageData() {
   }

    public PageData(IPage<T> page) {
   
        this.setRecords(page.getRecords());
        this.setPageNo(page.getCurrent());
        this.setPageSize(page.getSize());
        this.setTotalCount(page.getTotal());
    }

    public <E> PageData(IPage<E> page, Function<E, T> mapper) {
   
        this.setPageNo(page.getCurrent());
        this.setPageSize(page.getSize());
        this.setTotalCount(page.getTotal());
        if (CollUtil.isEmpty(page.getRecords())) {
   
            this.<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值