Java接口统一样式返回模板简介

作者:web_bird 时间:2022-10-31 19:50:43 

这篇文章主要介绍了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
}

到这里,基本上关于接口样式的模板也就介绍完了,如有不准确的地方,请留言多多指教。

来源:https://www.cnblogs.com/zhiyouwu/p/11765407.html

标签:java,接口,统一,样式,返回,模板
0
投稿

猜你喜欢

  • C#实现航班预订系统

    2021-12-26 02:19:37
  • java实现文件下载的两种方式

    2023-11-11 06:37:14
  • Spring中的注解之@Override和@Autowired

    2022-08-07 19:56:47
  • Kotlin四大组件中的broadcast广播

    2023-07-08 00:44:08
  • Java中的ThreadLocal详解

    2023-01-02 16:02:21
  • java编程题之顺时针打印矩阵

    2022-02-22 04:05:36
  • C#中的timer与线程使用

    2023-08-21 00:13:11
  • springboot集成fastDfs过程代码实例

    2023-02-21 19:42:20
  • 浅谈Spring中单例Bean是线程安全的吗

    2023-07-12 23:42:21
  • Java编程实现对象克隆(复制)代码详解

    2023-02-13 10:12:31
  • JVM内存模型/内存空间:运行时数据区

    2023-01-14 13:12:23
  • C#将图片和字节流互相转换并显示到页面上

    2021-08-18 23:41:31
  • Flutter实现矩形取色器的封装

    2023-06-19 04:08:47
  • springboot logback调整mybatis日志级别无效的解决

    2023-05-03 05:36:21
  • Spring Cloud Alibaba 本地调试介绍及方案设计

    2023-05-26 21:24:26
  • Android中实现多行、水平滚动的分页的Gridview实例源码

    2022-01-14 08:23:58
  • C#实现复杂XML的序列化与反序列化

    2023-12-19 05:09:45
  • Android中子线程和UI线程通信详解

    2023-03-21 00:05:10
  • android音频编辑之音频裁剪的示例代码

    2021-08-13 00:30:20
  • SSH框架网上商城项目第22战之银行图标以及支付页面显示

    2022-02-18 19:34:03
  • asp之家 软件编程 m.aspxhome.com