描述: 对RPC调用的结果, 参数进行封装
包含两种类型的封装
- 无分页的请求调用
- 分页请求调用
maven:
<dependency>
<groupId>com.clubfactory.center</groupId>
<artifactId>rpc-util</artifactId>
<version>1.0.7</version>
</dependency>
代码展示
- 返回结果封装
包含4种结果类型, 每一种返回都进行了友好封装, 同时调用方能很方便的判断是否成功
1.成功SUCCESS
2.校验失败ERROR_VALIDATE
3.业务逻辑错误ERROR_BIZ
4.系统错误ERROR_SYS
@Accessors(chain = true)
public class Result<T> implements Serializable {
/**
* 成功
**/
private static final int SUCCESS = 1001;
/**
* 验证类异常
**/
private static final int ERROR_VALIDATE = 2002;
/**
* 业务类异常
**/
private static final int ERROR_BIZ = 3003;
/**
* 系统类异常
**/
private static final int ERROR_SYS = 4004;
@Getter
@Setter
private Integer code;
@Getter
@Setter
private String msg;
@Getter
@Setter
private T data;
/**
* 返回成功,无返回值
*
* @param <T>
* @return
*/
public static <T> Result<T> success() {
final Result<T> result = new Result<T>();
result.setCode(SUCCESS);
result.setMsg(null);
result.setData(null);
return result;
}
/**
* 返回成功,又返回值
*
* @param value
* @param <T>
* @return
*/
public static <T> Result<T> success(T value) {
final Result<T> result = new Result<T>();
result.setCode(SUCCESS);
result.setData(value);
result.setMsg(null);
return result;
}
/**
* 验证类异常
*
* @param errorMsg
* @param <T>
* @return
*/
public static <T> Result<T> errorValidate(String errorMsg) {
final Result<T> result = new Result<T>();
result.setMsg(errorMsg);
result.setData(null);
result.setCode(ERROR_VALIDATE);
return result;
}
/**
* 业务类异常
*
* @param errorMsg
* @param <T>
* @return
*/
public static <T> Result<T> errorBiz(String errorMsg) {
final Result<T> result = new Result<T>();
result.setMsg(errorMsg);
result.setData(null);
result.setCode(ERROR_BIZ);
return result;
}
/**
* 系统类异常
*
* @param errorMsg
* @param <T>
* @return
*/
public static <T> Result<T> errorSystem(String errorMsg) {
final Result<T> result = new Result<T>();
result.setMsg(errorMsg);
result.setData(null);
result.setCode(ERROR_SYS);
return result;
}
/**
* 其他类异常(用于客户端做特殊校验)
* 返回编码为5005-6006之间
*
* @param code
* @param msg
* @return
*/
public static <T> Result<T> errorOther(Integer code, String msg) {
final Result<T> result = new Result<T>();
result.setMsg(msg);
result.setData(null);
result.setCode(code == null ? 5005 : code);
return result;
}
public Result() {
}
/**
* 判断返回对象是成功还是失败
*
* @return
*/
public boolean isSuccess() {
if (this.code != null && this.code == SUCCESS) {
return true;
}
return false;
}
}
- 分页结果封装, 创建接口进行了友好封装, 使用很便捷
分页数据相关信息封装, 包含:
1.当前页pageNum
2.每页的数量pageSize
3.总页数pageSize
4.当前页数据list
@Accessors(chain = true)
public class PageDetailForm<T> implements Serializable {
/** 当前页 */
@Setter
private int pageNum;
/** 每页的数量 */
@Getter
@Setter
private int pageSize = 10;
/** 总记录数 */
@Getter
@Setter
private int total;
/** 结果集 */
@Setter
private List<T> list;
/** 是否有下一页**/
@Setter
private Boolean isEnd;
public int getPageNum() {
if(pageNum < 1) {
pageNum = 1;
}
return pageNum;
}
public Boolean getIsEnd() {
return ((pageNum -1) * pageSize + getList().size()) >= total;
}
public List<T> getList() {
if(list == null || list.size() == 0) {
return new ArrayList<>();
}
return list;
}
public PageDetailForm() {
}
public PageDetailForm(PageForm pageForm) {
this.pageNum = pageForm.getPageNum();
this.pageSize = pageForm.getPageSize();
}
public PageDetailForm(int pageNum, int pageSize, int total, List<T> list) {
this.pageNum = pageNum;
this.pageSize = pageSize;
this.total = total;
this.list = list;
}
public PageDetailForm(int pageNum, int pageSize) {
this.pageNum = pageNum;
this.pageSize = pageSize;
total = 0;
list = new ArrayList<>();
}
}
- 分页参数进行封装
分页参数标准化, 提供了mysql数据查询层getPageIndex封装, 简化mysql分页中start, limit的处理
@Accessors(chain = true)
public abstract class PageForm implements Serializable {
@Getter
@Setter
private Integer pageNum=1;
@Getter
@Setter
private Integer pageSize=10;
@Setter
private Integer pageIndex = 0;
public Integer getPageIndex() {
return (pageNum -1) * pageSize;
}
}
使用示例
1.无分页: 更新数据示例
调用方通过返回值result的, result.isSuccess()判断调用是否成功
如果调用失败, 通过result.getMsg()获取失败信息
@Override
public Result<Boolean> update(ExcelProcessTaskDTO dto) {
if(BaseUtil.isEmpty(dto)){
return Result.errorValidate(PARAM_EMPTY);
}
return Result.success(excelProcessTaskBiz.update(dto));
}
2.分页查询
a. 定义分页查询参数
@Data
@Accessors(chain = true)
public class ExcelProcessTaskParamDTO extends PageForm{
/**
* 卖家id
*/
private Integer sellerId;
}
b. 定义返回数据类型
@Data
@Accessors(chain = true)
public class ExcelProcessTaskDTO extends BaseDTO {
/**
*
*/
private Integer id;
/**
*
*/
private Date createTime;
/**
*
*/
private Date updateTime;
/**
*
*/
private String batchId;
/**
*
*/
private Integer sellerId;
/**
* seller名称
*/
private String sellerName;
/**
* seller国家
*/
private String country;
/**
* 上传文件名称
*/
private String uploadUrl;
/**
* 错误数量
*/
private Integer errorCount;
/**
* 上传失败的行数
*/
private Integer failedLines;
/**
* 上传成功的行数
*/
private Integer successLines;
/**
* 文件上传任务状态
*/
private Integer taskStatus;
/**
* 上传报告名称
*/
private String reportUrl;
}
c. 进行分页查询并返回数据
@Override
public Result<PageDetailForm<ExcelProcessTaskDTO>> listTask(ExcelProcessTaskParamDTO param) {
//参数校验
if(BaseUtil.isEmpty(param)){
return Result.errorValidate(PARAM_EMPTY);
}
if (BaseUtil.isNotPositive(param.getSellerId())) {
return Result.errorValidate("SellId不能为空!");
}
//得到数据
List<ExcelProcessTaskDTO> dtos = excelProcessTaskBiz.listTask(param.getSellerId(), param.getPageIndex(), param.getPageSize());
return Result.success(new PageDetailForm(param).setList(dtos));
}
网友评论