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.<