遇到前后端业务需要不一致时对Controller返回结果进行封装

后端返回结果

前后端分离后 web 端要求结果

{"counts": 2694,"pagesize": 14,"pages": 8,"page": 66,"items": [{"id": 9009384,"title": "nulla ea quis laboris","create_date": 1773009}]
}
}

自定义VO对象进行转换

@Data
public class PageVO<T> {private  long counts; //总个数private  long pagesize; //每页个数private  long pages; //总页数private  long page; //当前页private List<T> items; //数据记录public PageVO(IPage page) {this.pagesize = page.getSize();this.counts = page.getTotal();this.page = page.getCurrent();this.pages = page.getPages();this.items = page.getRecords();}
}

结合pageVo进行封装

@ApiOperation(value = "分页列表查询(按照规范)")@ApiImplicitParams({@ApiImplicitParam(paramType="path", name = "page", value = "当前页码", required = true, dataType = "Integer"),@ApiImplicitParam(paramType="path", name = "pageSize", value = "分大小", required = true, dataType = "Integer"),@ApiImplicitParam(paramType="query", name = "name", value = "用户名", required = false, dataType = "String")})@GetMapping("/pagevoList/{page}/{pageSize}")public PageVO<OperatorUser> findListByPageVO(@PathVariable(name = "page") int pageNo, @PathVariable(name = "pageSize") int pageSize, @RequestParam(name = "name",required = false) String name){​IPage<OperatorUser>  page= operatorUserService.queryPageByName(pageNo, pageSize, name);PageVO<OperatorUser> pageV0= new PageVO<OperatorUser>(page);return  pageV0;}

结果根据需要进行封装

处理复杂业务
需求:

一、对返回状态进行统计封装

/*** 返回结果通用对象封装*/
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class BaseResponse<D> implements Serializable{private static final long serialVersionUID = -2145852753254617071L;//是否成功private boolean success;//异常信息private String message;//200表示正常,300接口返回false,400调用异常private int code;//泛型,用来存储原有controller返回值private D data;
​public BaseResponse() {this.code = 200;this.message = "success";this.success = true;}
​
​public BaseResponse(D data){this();this.data = data;}
​public BaseResponse(boolean success){this();this.success = success;if(success == false){this.message = "操作失败";this.code = 300;}}
​public BaseResponse(boolean success,String msg){this(success);this.message = msg;}
​public BaseResponse(int code,String msg){this(false,msg);this.code = code;}
}

因为当前所有的controller对于数据返回的类型有boolean、Result、PageVO。因此当前的解决思路是设置返回值拦截,进行数据格式组装。

/*** 返回结果统一转换*/
@RestControllerAdvice(basePackages = "com.restkeeper")
public class ResponseAdvisor implements ResponseBodyAdvice<Object> {​/***  判断哪些需要拦截*/@Overridepublic boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {return true;}
​/*** 返回结果包装* @param body controller返回的数据* @param returnType* @param selectedContentType* @param selectedConverterType* @param request* @param response* @return*/@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {​if (body instanceof Result){return body;}
​if (body instanceof Boolean){boolean result = (boolean)body;return new BaseResponse<Boolean>(result);}
​if (body instanceof PageVO){return new BaseResponse<>(body);}
​return new BaseResponse<>(body);}
}

Java 前后端分离业务封装 对后端返回值进行封装 PageVO封装相关推荐

  1. java通过jdbc访问mysql,update数据返回值的思考

    java通过jdbc访问mysql,update数据返回值的思考 先不说那么多,把Java代码贴出来吧. public static void main(String[] args) throws I ...

  2. Java学习第十二天----方法参数类型以及返回值类型问题、链式编程、package包、权限修饰符、内部类、成员内部类

    Java学习第十二天----方法参数类型以及返回值类型问题.链式编程.package包.权限修饰符.内部类.成员内部类 1.方法参数类型: (1)类名作为形式参数: public class MyTe ...

  3. 前后端分离开发模式下后端质量的保证 —— 单元测试

    概述 在今天, 前后端分离已经是首选的一个开发模式.这对于后端团队来说其实是一个好消息,减轻任务并且更专注.在测试方面,就更加依赖于单元测试对于API以及后端业务逻辑的较验.当然单元测试并非在前后端分 ...

  4. ultraedit 运行的是试用模式_单元测试 —— 前后端分离开发模式下后端质量的保证...

    概述 在今天, 前后端分离已经是首选的一个开发模式.这对于后端团队来说其实是一个好消息,减轻任务并且更专注.在测试方面,就更加依赖于单元测试对于API以及后端业务逻辑的较验.当然单元测试并非在前后端分 ...

  5. dotnetcore+vue+elementUI 前后端分离架 二(后端篇)

    前言 最近几年前后端分离架构大行其道,而且各种框架也是层出不穷.本文通过dotnetcore +vue 来介绍 前后端分离架构实战. 涉及的技术栈 服务端技术 mysql 本项目使用mysql 作为持 ...

  6. Javaweb15==mysql+mybatis+servlet+axios+fasetjson+vue+elementUI前后端分离,实现列表后端分页、模糊查询后分页、新增、单一/批量删除、修改

    难点:模糊查询后再次分页,并可以选择页数. 最终环境配置: maven3.8:依赖包管理 IDEA2021+JDK8+mysql connector java5+Mysql5+mybatis3.5:从 ...

  7. vue调用接口修改密码_vue开发前后端分离前端如何调用后端接口?

    对前后端分离如何调用接口这块感觉一直没怎么弄明白,但又不知如何说明,下面我模拟一个项目说明我的问题. 现在我们有个项目,前端用vue开发,后端php开发,后端测试地址为:localhost:8181, ...

  8. java grpc 客户端处理 go 服务端多返回值_grpc基础实践(二)

    在此篇中我们将简要介绍关于grpc对java客户端的实现. 在开始开发前,我们需要先导入 io.grpc grpc-netty 1.11.0io.grpc grpc-protobuf 1.11.0io ...

  9. java基础之final关键字,形式参数和返回值问题

    目录 一:final关键字 二:形式参数和返回值问题 1:形式参数 2:返回值类型 3:例子 一:final关键字 1:final关键字是最终的意思,可以修饰类,成员变量,成员方法. 2:修饰类,类不 ...

最新文章

  1. Java任务调度框架Quartz
  2. html页面的header,HTML5教程 | HTML5 header和footer元素
  3. DCMTK:创建和验证DICOM数字签名
  4. C语言实现希尔排序shell sort算法之二(附完整源码)
  5. Hello Mybatis 03 数据关联
  6. java更好的语言_五个使Java变得更好的功能
  7. 在没有XML的情况下测试Spring和Hibernate
  8. git如何拉去开发的 最新代码_linux脚本拉取git代码并发布tomcat应用
  9. SpringCloud Feign实战(二)
  10. 计算机系统安装要点,电脑重新装系统要注意哪些要点 重装系统时的六大事项...
  11. c++ 空类大小不为0的原因
  12. 安卓手机如何复制粘贴不重叠_多台电脑安卓手机跨设备复制粘贴利器——Clipbrd...
  13. Windows+Caffe+VS2013+python接口配置过程
  14. 【转】安装虚拟机VMware及在VMware下安装Ghost XP系统图文教程(附PQ分区及VMware共享教程)
  15. Python 与量化分析
  16. 别用微信文件传输助手了,这6款在线工具真香
  17. Hash算法解决冲突的方法
  18. PTA:7-9 分钟秒钟的时间相减
  19. GitChat · 人工智能 | 如何零基础用 Keras 快速搭建实用深度学习模型
  20. 【预告】千亿数据的潘多拉魔盒:从分库分表到分布式数据库

热门文章

  1. ASP动态网页编程的19个基本技巧01
  2. 【生物力学】《人体骨肌系统生物力学》- 王成焘老师 - 第1章 - 总论
  3. 最通俗易懂明明白白的jvm内存结构
  4. 最新的智能移动终端ios,android等市场占有率情况
  5. 任正非致歉华为前程序员:回来吧,公司错了
  6. sql server 2019安装及登录失败问题回头看
  7. 教程:github中404网站的设置
  8. 11. 对象创建模式之 Builder模式(构建器)(不常用)
  9. JsonRpc源码--处理http请求源码刨析
  10. 图神经网络综述论文笔记