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
}

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java如何在沙箱环境中测试支付宝支付接口

    java沙箱环境测试支付宝支付接口? 准备工作,登陆支付宝开放平台,进入沙箱环境 开放平台链接:https://developers.alipay.com/platform/developerIndex.htm 沙箱环境中给测试提供了一些必要和非必要的参数,需要自己动手修改的只有RSA密钥,需要通过支付宝提供的开发工具生成RSA密钥,下载链接:https://docs.open.alipay.com/291/105971#LDsXr 下载完成安装之后,可以生成RSA密钥.生成的密钥分为应用公钥,

  • Java中使用JWT生成Token进行接口鉴权实现方法

    先介绍下利用JWT进行鉴权的思路: 1.用户发起登录请求. 2.服务端创建一个加密后的JWT信息,作为Token返回. 3.在后续请求中JWT信息作为请求头,发给服务端. 4.服务端拿到JWT之后进行解密,正确解密表示此次请求合法,验证通过:解密失败说明Token无效或者已过期. 流程图如下: 一.用户发起登录请求 二.服务端创建一个加密后的JWT信息,作为Token返回 1.用户登录之后把生成的Token返回给前端 @Authorization @ResponseBody @GetMappin

  • java中的接口能够被实例化吗

    写在前面的话 学习java这么久了,好像已经习惯了new对象,平时new对象主角是类(class).乍一听对接口(interface)实例化,这这这可能吗,怕不是疯了!下文首先通过在IDEA中编写代码演示说明,然后分析怎样操作才能对接口进行实例化.希望博主的博文能够对java学习道路上的你有所帮助,喜欢的话点赞留言收藏哦~ 1.在IDEA中进行代码演示 直接用平时new类(class)对象的方式对接口进行操作,达不到效果,IDEA提示:Runnable' is abstract; cannot

  • java通过PDF模板填写PDF表单

    本文实例为大家分享了java通过PDF模板填写PDF表单的具体代码,包括图片,供大家参考,具体内容如下 需要用到的java包: itext.jar.iTextAsian.jar的JAR包.这个包里面定义了与中文输出相关的一些文件. 编写的表单如下: import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap;

  • java实现在pdf模板的指定位置插入图片

    本文实例为大家分享了java在pdf模板的指定位置插入图片的具体代码,供大家参考,具体内容如下 java操作pdf有个非常好用的库itextpdf,maven: <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.6</version> </dependency> <!--

  • 详解IDEA自定义注释模板(javadoc)

    最近要开始做项目了,项目规定了方法注释模板,那么idea是如何自定义注释模板的呢? 有两种解决方案: 1.安装Jindent插件,好处是自动生成模板,但是很可惜本人安装失败,设置好以后不知道为什么无法Apply,可能是我的版本问题,失败的同学请看方案二. 2.Jindent插件下载:http://plugins.jetbrains.com/plugin/2170?pr=idea,也可以直接在idea中在线安装,类似eclipse的在线install2.使用idea自带的Live Template

  • java如何写接口给别人调用的示例代码

    计算机语言分类有很多,如C.C++.C#.Java.Php.Python等等,她们有各自的特性及擅长的领域,但她们各自又不是全能的.在一个稍微大型一点的项目都会用到多种语言共同完成,那么这些编程语言如何进行通信呢.什么意思呢,就是比如说我Java写的一个方法,其他编程语言要怎么去调用呢?这就是本文要探讨的问题了. 一般来说,方法层面的编程语言通信用的是网络接口形式,只暴露出形参和结果供别人调用.接口一般分为接口定义者和接口调用者,定义者可以规定接收参数的类型及返回形式,而接口定义者则只能完全按照

  • 微信公众平台 发送模板消息(Java接口开发)

    前言:最近一直再弄微信扫码推送图文消息和模板消息发送,感觉学习到了不少东西.今天先总结一下微信公众平台模板消息的发送.因为这个自己弄了很久,开始很多地方不明白,所以今天好好总结一下. 微信公众平台技术文档:模板消息接口 一.概述 模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等.不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息. 关于使用规则,请注意: 1.所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入

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

    这篇文章主要介绍了Java接口统一样式返回模板简介,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 背景 在进行接口开发时,一般需要一个固定的返回样式,成功和失败的时候,都按照这种格式来进行统一的返回,这样,在与其他人进行接口之间的联调时不会显得很杂乱无章.而这种固定的格式如果放在Java的每个接口单独处理时,又会在接口开发时很繁琐,所以这个时候可以采用封装一个实体类,统一返回固定模板格式的内容. 封装模板 先看一下没有封装之前,接口代码和返回格

  • Java接口统一样式返回模板的实现

    前言 一开始,我们在写项目的时候,前端要什么数据,我们就返回什么数据,每个接口也都写得不一样很乱:随着前后端的分离:对于代码规范的要求也越来越严谨:接口都是统一样式的返回模板: 下面,接受一种我之前用过的返回模板: 一.首先来看下我们的Controller接口 /** * 获取用户信息 * @param token 微信登入者token * @param id 商品id * @return 商品详细信息 */ @PostMapping(value = "getUserInfo") @R

  • java接口返回参数按照请求参数进行排序方式

    目录 java接口返回参数按照请求参数进行排序 排序 java通过接口进行排序 描述 知识点 1.Comparable接口 2.Comparator接口 java接口返回参数按照请求参数进行排序 在项目实际开发中可能遇到过这种问题,接口请求参数顺序是[a,b,c],结果返回的数据是[bObject,cObject,aObject],导致这种原因可能是底层采用了设计模式,或者是表拼接查询,本文主要就是为了实现这种功能,采用流的方法 代码实现 import lombok.Data; import j

  • Java接口返回省市区树形结构的实现

    目录 前言 设计表结构 Java代码 调用接口查看结果 前言 最近和前端联调接口,需要进行一个省市区联动,最终定的方案是通过接口返回一个树形结构给前端,类似这样的结构: 下面就把相关表和代码分享给大家 设计表结构 表结构已经准备好了,直接执行即可. 由于数据量较大,这里放不下,需要的伙伴们可以私聊我 CREATE TABLE `sys_region` ( `id` int(19) NOT NULL AUTO_INCREMENT COMMENT 'id', `pid` int(19) NULL D

  • 深入解析Java接口(interface)的使用

    Java接口(interface)的概念及使用 在抽象类中,可以包含一个或多个抽象方法:但在接口(interface)中,所有的方法必须都是抽象的,不能有方法体,它比抽象类更加"抽象". 接口使用 interface 关键字来声明,可以看做是一种特殊的抽象类,可以指定一个类必须做什么,而不是规定它如何去做. 现实中也有很多接口的实例,比如说串口电脑硬盘,Serial ATA委员会指定了Serial ATA 2.0规范,这种规范就是接口.Serial ATA委员会不负责生产硬盘,只是指定

  • 微信小程序实现获取小程序码和二维码java接口开发

    前言:目前小程序推出了自己的识别码,小程序码,这个圆形的码看起来比二维码好看.本文总结微信小程序的获取小程序码和二维码并生成二维码图片的接口开发.主要内容摘抄自微信小程序的API文档,java接口开发是自己总结开发. 微信小程序API文档:获取二维码 一.简介 通过后台接口可以获取小程序任意页面的二维码,扫描该二维码可以直接进入小程序对应的页面.目前微信支持两种二维码,小程序码(左),小程序二维码(右),如下所示: 二.获取小程序码 目前有两个接口可以生成小程序码,开发者可以根据自己的需要选择合

  • Laravel框架Blade模板简介及模板继承用法分析

    本文实例讲述了Laravel框架Blade模板及模板继承用法.分享给大家供大家参考,具体如下: 本章知识点主要如下: Blade模板简介 Blade模板继承使用 NO.1Blade模板简介 问: 什么是Blade模板? 答: Blade模板是Laravel提供一个既简单又强大的模板引擎: 和其他流行的PHP模板引擎不一样,他并不限制你在视图里使用原生PHP代码: 所有Blade视图页面都将被编译成原生的PHP代码并缓存起来,除非你的模板文件被修改,否则不会重新编译. 而这些都意味着Blade不会

  • SpringBoot 统一请求返回的实现

    目前我们的返回是直接把实体类扔给请求方,这样很不友好,一方面没有统一的格式,二来请求方不知道请求成功与否,没有一个可以判断的东西,也没有说明性的返回. 本篇就来为所有接口提供一个统一的友好返回. 确定返回结构 首先,我们先确定好我们接口返回的格式是什么样的,然后再一步一步实现下面的. { "code": 200, "msg": "ok", "data": "" } code 字段表示状态码,调用方根据该码来

  • Java封装统一的Result Model案例

    在开发过程中,有时候会需要使用错误码+错误信息的形式,来返回某些业务操作的错误结果信息,来代替效率较低的异常传递. 这样就需要封装一个统一的Result model作为返回值,代替直接返回数据等结果. 1.定义错误码 - 错误信息接口 错误码可能是String.Integer.Long 等类型,也可能是enum类型.因此这里使用泛型来代替,错误码类型,可以提高灵活性 .也可以通过枚举直接实现CodeMessage接口. public interface CodeMessage<C>{ C ge

随机推荐