后端数据交互传输的格式 以及优雅的写法(二)

场景:针对分页页面;我主要负责的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;

总结

细节部分还是很有些复杂的(对于经验 不多的我来说),以后多用吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值