Java接口统一样式返回模板
Java接口统一样式返回模板
背景
在进行接口开发时,一般需要一个固定的返回样式,成功和失败的时候,都按照这种格式来进行统一的返回,这样,在与其他人进行接口之间的联调时不会显得很杂乱无章。而这种固定的格式如果放在Java的每个接口单独处理时,又会在接口开发时很繁琐,所以这个时候可以采用封装一个实体类,统一返回固定模板格式的内容。
封装模板
先看一下没有封装之前,接口代码和返回格式:
/**
* 用户修改
* @return 返回修改的用户信息
*/
@PutMapping(value = "update")
public User update(@RequestBody User user) {
User updatedUser = userService.update(user);
return updatedUser;
}
{
"userId": "0d67cfa7-f6a1-46b6-8e5a-b605afc98c44",
"username": "ww",
"password": "123456",
"status": 0,
"createTime": 310863886132307,
"updateTime": 312955781619836
}
很显然,这种原始的内容返回虽然很直观,但是如果在发生错误的时候,那么接口的返回就比较的不自然了,甚至会将底层的错误对外暴露,下面介绍下一个简单的统一接口样式的封装:
枚举类ResponseCode:定义返回码code及提示信息msg
我们先定义一个枚举类,用于封装返回的code码和提示信息msg,当然也可以封装其他的信息,比如状态status,这个可以根据自己的项目自由选择。
package com.server.config;
/**
* @Package com.server.config
* @Author wuzy
* @Date 2019/10/30 14:47
* @Version V1.0
* @Description: code码封装枚举类
*/
public enum ResponseCode {
/** 成功 */
SUCCESS("200", "成功"),
/** 操作失败 */
ERROR("500", "操作失败");
private ResponseCode(String value, String msg){
this.val = value;
this.msg = msg;
}
public String val() {
return val;
}
public String msg() {
return msg;
}
private String val;
private String msg;
}
封装类ResultData: 定义code、msg及数据data
再定义一个封装类ResultData,该类用于接口返回时的统一格式封装,这里,我们定义了三个属性,分别为状态码code,提示消息msg以及返回的数据data。下面是具体的代码:
package com.server.config;
import lombok.Data;
/**
* @Package com.server.config
* @Author wuzy
* @Date 2019/10/30 14:38
* @Version V1.0
* @Description: 返回样式封装
*/
@Data
public class ResultData {
private String code;
private String msg;
private Object data;
public static ResultData success(Object data) {
return resultData(ResponseCode.SUCCESS.val(), ResponseCode.SUCCESS.msg(), data);
}
public static ResultData success(Object data, String msg) {
return resultData(ResponseCode.SUCCESS.val(), msg, data);
}
public static ResultData fail(String code, String msg) {
return resultData(code, msg, null);
}
public static ResultData fail(String code, String msg, Object data) {
return resultData(code, msg, data);
}
private static ResultData resultData(String code, String msg, Object data) {
ResultData resultData = new ResultData();
resultData.setCode(code);
resultData.setMsg(msg);
resultData.setData(data);
return resultData;
}
}
可以根据自己项目的需求进行方法、属性等内容的扩展。
测试实例
这里,我们使用UserController中的save()方法进行测试,查看其添加了统一样式之后的效果,先看下该方法:
/**
* 用户保存
* @return 返回保存的用户信息
*/
@PostMapping(value = "save")
@ApiOperation(value = "保存用户信息", notes = "保存用户的详细信息")
public ResultData save(@RequestBody User user) {
try {
User savedUser = null;
if (user != null) {
if (StringUtils.isEmpty(user.getUserId())) {
user.setUserId(UUID.randomUUID().toString());
}
savedUser = userService.save(user);
// int i = 1/0; // 测试异常现象时放开这行代码
}
return ResultData.success(savedUser);
} catch (Exception e) {
e.printStackTrace();
return ResultData.fail(ResponseCode.ERROR.val(), "用户保存过程中发生异常,请检查!");
}
}
先看一下成功(也就是调用success方法)的情况
{
"code": "200",
"msg": "成功",
"data": {
"userId": "0d67cfa7-f6a1-46b6-8e5a-b605afc98c44",
"username": "ww",
"password": "123456",
"status": 0,
"createTime": 310863886132307,
"updateTime": 312955781619836
}
}
再看一下发生异常或者保存失败时候的错误提示信息,这里使用1/0的异常来测试,结果如下:
{
"code": "500",
"msg": "用户保存过程中发生异常,请检查!",
"data": null
}
到这里,基本上关于接口样式的模板也就介绍完了,如有不准确的地方,请留言多多指教。
微信公众号: 源码湾
欢迎关注本人微信公众号: 源码湾。 本公众号将不定期进行相关源码及相关开发技术的分享,共同成长,共同进步~

Blog:
- 简书: https://www.jianshu.com/u/91378a397ffe
- csdn: https://blog.csdn.net/ZhiyouWu
- 开源中国: https://my.oschina.net/u/3204088
- 掘金: https://juejin.im/user/5b5979efe51d451949094265
- 博客园: https://www.cnblogs.com/zhiyouwu/
- 微信公众号: 源码湾
- 微信: WZY1782357529 (欢迎沟通交流)
Java接口统一样式返回模板的更多相关文章
- 如何POST一个JSON格式的数据给java接口,获得返回数据
/** * 模拟post进行url请求 * @param string $url * @param json $post_data */ public function request_post($u ...
- thinkphp api接口 统一结果返回处理类
20210602 修正 wqy的笔记:http://www.upwqy.com/details/216.html 返回结果处理,归根结底 主要是有两点 数据结构和返回的数据类型 1.数据类型 :一般情 ...
- C#后台接java接口传输字节数组(byte[])
事情是这样的C#t代码之前接的WCF接口,后来那边统一改为java的接口,我是用的HttpClient从后台发请求调用的java接口,其他接口都很顺利,是的....知道遇到一个需要传byte[]类型数 ...
- Java生鲜电商平台-统一格式返回的API架构设计与实战
Java生鲜电商平台-统一格式返回的API架构设计与实战 说明:随着互联网各岗位精细化分工的普及,出现了很多的系统架构设计,比如常见的前后端分离架构,后端提供接口给前端,前端根据接口的数据进行渲染,大 ...
- Spring Boot 无侵入式 实现RESTful API接口统一JSON格式返回
前言 现在我们做项目基本上中大型项目都是选择前后端分离,前后端分离已经成了一个趋势了,所以总这样·我们就要和前端约定统一的api 接口返回json 格式, 这样我们需要封装一个统一通用全局 模版api ...
- java笔记--用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程
用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程 ThreadLocal在我的笔记"关于线程同步"的第5种方式里面有介绍,这里就不多说了. ...
- Java面向对象(Eclipse高级、类与接口作为参数返回值)
面向对象 今日内容介绍 u Eclipse常用快捷键操作 u Eclipse文档注释导出帮助文档 u Eclipse项目的jar包导出与使用jar包 u 不同修饰符混合使用细节 u 辨析何时定义变 ...
- webapi接口统一返回请求时间
webapi接口统一返回请求时间: public class BaseController : ControllerBase { protected ReturnResult<T> Res ...
- 如何设计 API 接口,实现统一格式返回?
文章目录: 目录 前后端接口交互 接口返回值约定 返回值规范 正确返回 错误返回 统一定义错误码 错误码规范 Controller 层如何用? 正确返回 错误返回 详细代码实现 错误码 Control ...
随机推荐
- ActiveMQ基本使用
消息队列,目前在实际的开发项目中应用十分广泛.本文主要介绍入门级的ActiveMQ的基本使用以及相关的概念. 一.JMS 全称 Java Message Service,即Java消息服务.JMS是一 ...
- 生物医学命名实体识别(BioNER)研究进展
生物医学命名实体识别(BioNER)研究进展 最近把之前整理的一些生物医学命名实体识别(Biomedical Named Entity Recognition, BioNER)相关的论文做了一个Bio ...
- Android Studio [RecyclerView/瀑布流显示]
PuRecyclerViewActivity.java package com.xdw.a122.recyclerview; import android.support.v7.app.AppComp ...
- Linux虚拟机--进入MySQL报错的解决办法
在Linux安装MySQL有时候会出现 [mysql]ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/ ...
- JDBC对Mysql utf8mb4字符集的处理
写在前面 在开发微信小程序的时候,评论服务模块希望添加上emoji表情,但是emoji表情是4个字节长度的,所以需要进行设置 当前项目是JAVA编写, 使用JDBC连接操作数据库, 如下针对的JDBC ...
- leveldb 源码--总体架构分析
一 本文目的 对leveldb的总体设计框架分析(关于leveldb基本原理,此文不做阐述,读者可以自行检索文章阅读即可),对leveldb中底层数据存储数据格式,内存数据模型,compact,版本管 ...
- SUSE CaaS Platform 4 - 安装技巧
1.虚拟化环境搭建 - 网络 首先,虚拟机其中一块网卡桥接到 VMnet8 上,通过 VMnet8 地址转换出去访问互联网,如果我们直接桥接到 WIFI 网卡上,由于在不同的的网络环境,地址会时长会 ...
- php 正则判断是否是手机号码 最新
php 正则判断是否是手机号码 最新 标签: php正则 2013-09-22 14:31 55076人阅读 评论(1) 收藏 举报 分类: php(42) 版权声明:本文为博主原创文章,若转载请 ...
- Nginx+Tomcat Https SSL部署方案
1.软件版本: nginx-1.15+ tomcat-8.0+ 2.先解决一个疑问:Tomcat到底需不需要配置SSL? 答案:不需要 3.SSL申请 使用腾讯云.阿里云的服务器,会更加方便申请.(申 ...
- 夯实Java基础系列21:Java8新特性终极指南
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...