热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringmvSpringBootRestful接口返回结果统一封装统一异常封装

问题背景在web开发过程中,我们常常会提供两类接口。一类是内部接口,这类接口主要为web页面服务的,web前端可以通过ajax等手段进行

问题背景


  • 在web开发过程中,我们常常会提供两类接口。一类是内部接口,这类接口主要为web页面服务的,web前端可以通过ajax等手段进行后台数据的获取并渲染页面;另一类接口主要是供第三方使用,以便于与第三方系统集成。
  • 但不管是哪一种接口,不管返回数据内容如何千变万化, 为了保证返回数据的可读性,通常都会采用统一的格式封装数据值。
    期望封装格式如下:

{
“data”: Obj,
“errorCode”: 0,
“message”: “数据获取成功”
}

  • 这样一来,不管接口获取的是什么数据(文件流、字符串(非json形式的字符串)除外),序列化后的数据本身都仅仅是一个更大的json对象的data字段而已,与data字段处于同一级别的额外信息还包括errorCode、message、success等字段。
  • 采用统一的数据格式封装数据的好处不言而喻。比如在ajax调用数据成功以后,ajax根据返回的数据的errorCode字段是0还是其他错误编码,分别弹出不同颜色的提示框,以便区分数据到底是获取成功还是获取失败。
  • 然后,这个弹出的提示框往往会有一条提示信息,以便让用户知道,这个接口是什么原因导致调用失败的,而用于渲染提示框的提示信息,一般就取自message字段。

使用springmvc实现结果统一装配

从spring mvc 4.0起引入RequestBodyAdvice和ResponseBodyAdvice这两个接口。


  • RequestBodyAdvice主要用于对请求参数的增强处理。
  • ResponseBodyAdvice用于对响应参数的增强处理。

  1. 实现ResponseBodyAdvice
    在这里插入图片描述
    supports方法实现表明,只有序列化框架是Jackson才对返回结果进行增强,具体项目中使用了哪一种序列化框架,修改该方法的实现即可。
    在这里插入图片描述
    beforeBodyWrite方法表明,Jackson序列化框架序列化的是增强的结果对象,而不是Restful接口方法返回值代表的那个对象。
    在这里插入图片描述
  2. 增加@ControllerAdvice注解,由Spring管理
    在这里插入图片描述
  3. 代码对比
    先看统一返回前的代码:
    在这里插入图片描述
    统一返回后的:
    在这里插入图片描述
    如上述代码所示,使用springmvc的结果统一装配功能后,对于有返回值的方法,需要返回什么类型的数据,则直接返回指定类型的对象实例即可。逻辑清晰明了,不需要每一个方法都返回千篇一律的MessageBean对象。

异常处理统一封装


  1. 创建异常处理工具类
    增加BaseExceptionHandleAction类,并在类中同时使用@ExceptionHandler和@ResponseBody注解声明异常处理,示例代码如下:
    在这里插入图片描述
  2. 需要处理异常的控制器继承该类
    在这里插入图片描述
    然后,假如前端未传入状态status,前端收到的响应字符串如下:

{
“errorMsg “: “禁止操作”
“errorCode” : 403
}

推荐阅读
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • Ext JS MVC系列一:环境搭建与框架概览
    本文主要介绍了如何在项目中使用Ext JS 4作为前端框架,并详细讲解了Ext JS 4的MVC开发模式。文章将从项目目录结构、相关CSS和JS文件的引用以及MVC框架的整体认识三个方面进行总结。 ... [详细]
  • 本教程详细介绍了如何使用 Spring Boot 创建一个简单的 Hello World 应用程序。适合初学者快速上手。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 本文详细解析了 Yii2 框架中视图和布局的各种函数,并综述了它们在实际开发中的应用场景。通过深入探讨每个函数的功能和用法,为开发者提供了全面的参考,帮助他们在项目中更高效地利用这些工具。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
author-avatar
樱花漫天飞舞-卿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有