场景:针对分页页面;我主要负责的bsm(异常监管系统),在查看他第一个功能分页查询,前后端交互的时候如何对PageRequest和PageResponse进行封装呢?
首先看下我们Controller的格式
文章目录
PageRequest(Bsmpage+BaseRequest)封装 – 使用统一封装格式
前端所给的json文件
{
param: {
: ""}, time: 1624537629040, token: "bsm",…}
page: {
pageSize: 15, currentPage: 1, totalRecord: 0}
param: {
processState: ""}
time: 1624537629040
token: "bsm"
我们分析,其中token、time、param是其他RequestData接受类都需要的。而page是分页时才需要带上的参数
所以我们能把token、time、param他抽离出来,做一个基础的BsmRequest类,接收参数
我们把Page用BsmPage类进行接收。
后端PageRequest接受类
所给的属性有page、param 、time、token
其中Bsmpage为属性为
设置接收param的类–拟用BizAlarmVo类接收。
暂时设置以下的搜寻条件:需包含前端传输param内出现的全部内容 。
@ApiModel(value = "BizAlarmVo",description = "业务警告")
public class BizAlarmVo implements Serializable {
@ApiModelProperty(value = "告警时间段")
private List<Date> alarmTimes;
@ApiModelProperty(value = "应用名,应用ip,负责人检索字段")
private String search;
@ApiModelProperty(value = "告警处理状态")
private Integer processStatus;
}
设置返回格式PageResponse
后端需要传出的值为
{
"code":"0000",
"data":[
{
......省略
}
],
"message":"操作成功",
"page":{
"currentPage":1,
"pageSize":15,
"totalRecord":1
},
"success":true
}
其中包含了公共响应码"code"、操作信息"message",页码格式"page",是否成功"success";
- code;message;success;这写是通用参数,所以用BsmResponse进行封装,且根据.success()方法,对返回信息进行补充 — success使用重载一步一步嵌套补充;
- page; 属性 是对通用返回类的补充;则用PageResponse extend BsmResponse
BsmResponse
@ApiModel(description = "公共响应参数")
public class BsmResponse<T> {
@ApiModelProperty(value = "成功标识(true:成功,false:失败)")
private boolean success;
@ApiModelProperty(value = "响应信息")
private String message;
@ApiModelProperty(value = "响应代码(具体参考公共响应码)")
private String code;
@ApiModelProperty(value = "响应数据")
private T data;
## 进行对公共的参数进行补充
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public static BsmResponse succ() {
return succ(BsmConst.SUCC_MSG);
}
public static BsmResponse succ(boolean flag) {
String message = flag ? BsmConst.SUCC_MSG : BsmConst.FAIL_MSG;
return resp(flag, BsmConst.SUCC_CODE, message, null);
}
public static BsmResponse succ(String message) {
return succ(message, null);
}
public static BsmResponse succ(Object data) {
return succ(BsmConst.SUCC_MSG, data);
}
public static BsmResponse succ(String message, Object data) {
return succ(BsmConst.SUCC_CODE, message, data);
}
public static BsmResponse succ(String code, String message, Object data) {
return resp(true, code, message, data);
}
public static BsmResponse fail() {
return fail(BsmConst.FAIL_MSG);
}
public static BsmResponse fail(String message) {
return fail(BsmConst.SUCC_CODE, message);
}
public static BsmResponse fail(String code, String message) {
return fail(code, message, null);
}
public static BsmResponse fail(String code, String message, Object data) {
return resp(false, code, message, data);
}
public static <T> BsmResponse resp(boolean success, String code, String message, T data) {
BsmResponse<T> response = new BsmResponse<T>();
response.setCode(code);
response.setData(data);
response.setSuccess(success);
response.setMessage(message);
return response;
}
public static BsmResponse ssoFail(String date) {
BsmResponse response = new BsmResponse();
response.setCode("747");
response.setData(date);
response.setSuccess(false);
response.setMessage("登录用户信息失效");
return response;
}
public static BsmResponse authFail(Object date) {
BsmResponse response = new BsmResponse();
response.setCode("949");
response.setData(date);
response.setSuccess(false);
response.setMessage("权限不足或已被冻结,请联系管理员");
return response;
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
ResponseData
public class ResponseData {
private String code;
private Object data;
private String message;
private Boolean success;
public ResponseData(String code, Object data, String message,Boolean success) {
this.code = code;
this.data = data;
this.message = message;
this.success = success;
}
//成功且不用返回值
public static ResponseData success() {
return new ResponseData("0000", null, null,true);
}
//成功 需要返回data内容
public static ResponseData success(Object data) {
return new ResponseData("0000", data, "操作成功",true);
}
//失败
public static ResponseData fail(String message) {
return new ResponseData("错误", null, "操作失败",false);
}
}
##Controller层代码
@ApiOperation(value = "分页查询业务告警信息")
@PostMapping("/listPage")
public PageResponse listPage(@ApiParam() @RequestBody PageRequest<BizAlarmVo> requestData){
System.out.println(requestData.toString());
// 开始创建 query语句
BizAlarmVo bizAlarm = requestData.getParam();
//搜索条件
LambdaQueryWrapper<BsmBizAlarm> lqw = new LambdaQueryWrapper();
lqw.orderByDesc(BsmBizAlarm::getAlarmTime);
if (!StringUtils.isEmpty(bizAlarm.getAlarmTimes())) {
Date start = bizAlarm.getAlarmTimes().get(0);
Date end = bizAlarm.getAlarmTimes().get(1);
//long格式进行比较
lqw.ge(BsmBizAlarm::getAlarmTime, DateUtil.getDayStartTime(start));
lqw.le(BsmBizAlarm::getAlarmTime, DateUtil.getDayEndTime(end));
}
Page page = alarmMapper.selectPage(requestData.page(), lqw);
page.getRecords().forEach(System.out::println);
return PageResponse.succ(page);
}
细节
后端接收时间戳的格式
使用Long接收存入,数据库可以直接转成2020-03-19-18.53.20 +0800此格式
@ApiModelProperty(value = "请求时间戳")
private long time = 0;
后端接收时间的范围
@ApiModelProperty(value = "告警时间段")
private List<Date> alarmTimes;