api接⼝的返回信息封装(code,message,data)与分页数据封装,通⽤。源码来⾃github上⼀个Java的学习项⽬ mall-learning下的mall-tiny01
先看⽬录结构
common
api
CommonPage (分页数据封装 )
CommonResult (通⽤返回对象)
IErrorCode (interface,封装API的错误码)
ResultCode(枚举⼀些常⽤的API操作码)
⼀、
对于⼀个简单的api,最显⽽易见的就是 码(code) 和 信息(message),故对于这通⽤的⽅法,就写到接⼝⾥,接⼝⾥就只设置两个获取⽅法,获取 code和获取message
public interface IErrorCode{
long getCode();
String getMessage();
}
⼆、
新建枚举类ResultCode实现IErrorCode接⼝,主要内容⼏点
1. 继承接⼝⾥的两个⽅法(getCode和getMessage)
2. 既然有两个⽅法,所以必须也的有相关属性(code和message)
3. 构造函数(两个参数的)(构造函数会在类被使⽤前调⽤)
4. 枚举⼀些常⽤的api操作码和提⽰信息
public enum ResultCode implements IErrorCode{
SUCCESS(200,"操作成功"),
FAILED(500,"操作失败"),
VALIDATE_FAILED(404,"参数校验失败")
UNAUTHORIZED(401,"暂未登陆或token已经过期")
FORBIDDEN(403,"没有相关权限");
private long code;
private String messsage;
private ResultCode(long code,String message){
}
百度api接口public long getCode(){return code;}
public String getMessage(){return message;}
}
三、
新建返回对象类CommonResult< T >,该类⽐上⾯ 第⼆步的多了数据的处理(T data)
1. ⾸先还是写出三个基础属性(long code,String message,T data)
2. 给该类写⽆参和有参的构造⽅法
3. 给该类的三个属性编写get和set,来供其他类使⽤(获取或设值)
4. 最后编写通⽤的⼏种情况(根据不同的参数,重载⼏个⽅法)
1. 成功返回结果 Class.success(T data)//默认code默认message
2. 成功返回结果 Class.success(T data,String message)//默认code,传了message和data
3. 失败返回结果 Class.failed(IErrorCode errorCode)//默认code,默认message,⽆data
4. 失败返回结果 Class.failed(String message)//默认code,传了message,⽆data
5. 失败返回结果 Class.failed()
6. 参数验证失败返回结果 Class.validateFailed()
7. 参数验证失败返回结果 Class.validateFailed(String message)
8. 未登陆返回结果 Class.unauthorized(T data)
9. 未授权返回结果 Class.forbidden(T data)
1.成功返回结果
/**
*成功返回结果
*@param data 获取的数据
*/
public static<T> CommonResult<T>success(T data){
return new CommonResult<T>(
Code(),
Message(),
data);
}
*⽅法名:success
*参数⾏参 data,参数类型T
*⽅法返回值类型 ComonResult //CommonResult就是上⾯定义的包含了code,message和data的类
*关于public static < T > CommonResult< T > success
CommonResult< T > 是返回值类型,很好理解。
然后这个success是⽅法名,
先看这个CommonResult类它的定义``public class CommonResult<T>``,我们把这个CommonResult叫做声明了< T >的类(声明了范型的类)。
⽽对于声明了范型的类,该类下的⽅法就不⽤继续声明了(就是不⽤再继续添加< T >了,⽐如对于类⾥属性的get和set⽅法就不需要声明范型)。
success是类CommonResult类下的⽅法,按照上⼀句的理论来说它是不需要加范型的,但是这个⽅法被static修饰了,(被static修饰的⽅法严格来说就不是该类的⼀部分了),所以需要添加范型标志< T >。
(为什么要加static?我⽬前对static的理解是,被static修饰的,不需要依赖类来进⾏调⽤,只要类被加载了,直接调⽤类名即可)
2.成功返回结果
/**
*成功返回结果
*@param data 获取的数据
*@param message 提⽰信息
*/
public static<T> CommonResult<T>success(T data,String message){
return new CommonResult<T>(Code(),message,data);
}
关于ResultCode类,就是前⾯提到的枚举类,枚举类⼀些常见的码还有默认的提⽰信息
3.失败返回结果
/**
*失败返回结果
*@param errorCode 错误码
*/
public static<T> CommonResult<T>failed(IErrorCode errorCode){
return new CommonResult<T>(Code(),Message(),null);
}
⼊参是errorCode,⾥⾯本⾝就有getCode⽅法和getMessage⽅法,所以对于传进来的对象,直接调⽤这两个⽅法就⾏了4.失败返回结果
/**
*失败返回结果
*@param message 提⽰信息
*/
public static<T> CommonResult<T>failed(String message){
return new CommonResult<T>(Code(),message,null);
}
这个也很好理解,⼊参是message(提⽰信息),那么码就⽤默认的
5.失败返回结果
/**
*失败返回结果
*/
public static<T> CommonResult<T>failed(){
return failed(ResultCode.FAILED);
}
此处的failed调⽤了上述的第三个⽅法,参数是ResultCode.FAILED,
6.参数验证失败
/**
*参数验证失败
*/
public static<T> CommonResult<T>validateFailed(){
return failed(ResultCode.VALIDATE_FAILED);
}
此处的failed也是调⽤的上述的第三个⽅法,参数是ResultCode.VALIDATE_FAILED
7.参数验证失败返回结果
/**
*参数验证失败返回结果
*@param message 提⽰信息
*/
public static<T> CommonResult<T>validateFailed(String message){
return new CommonResult<T>(ResultCode.Code(),message,null);
}
8.未登陆返回结果
/**
*未登陆返回结果
*@param data 获取数据
*/
public static<T> CommonResult<T>unauthorized(T data){
return new CommonResult<T>(Code(),Message(),data); }
9.未授权返回结果
/**
*为授权返回结果
*@param data 获取数据
*/
public static<T> CommonResult<T>forbidden(T data){
return new CommonResult<T>(Code(),Message(),data);
}
四、
分页数据封装类 CommonPage< T >
分页数据就⼏个
pageNum(页码,第⼏页)
pageSize(页⾯⼤⼩,⼀页⼏条数据)
totalPage(总页数,⼀共有多少页)
total(条数,⼀共有多少条数据)
List< T > list (分页数据)
public class CommonPage<T>{
private Integer pageNum;
private Integer pageSize;
private Integer totalPage;
private Long total;
private List<T> list;
//get and set
public static<T> CommonPage<T>restPage(List<T> list){
CommonPage<T> result =new CommonPage<>();
PageInfo<T> pageInfo =new PageInfo<>(list);
result.PageNum());
result.PageSize());
result.Pages());
result.Total());
result.LIst());
return result;
}
}
定义了⼀个静态⽅法restPage,
和前⾯说的⼀样,因为类的定义⾥⾯⽤了范型< T >,返回值是CommonPage< T >这很好理解,
然后该⽅法⼜需要被定义成static,所以需要再将该⽅法指定成T类型的范型(也就是为什么要第⼀个< T >)
分页功能借助了⼯具类pageinfo,将数据传到pageInfo⾥,各个分页属性就会被封装好,然后再将pageInfo⾥的各个属性转移到我们⾃定义的CommonPage类⾥就⾏了

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。