• 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:

  • 相关阅读:
    整型数字转utf8
    cmake构建时指定编译器架构(x86 or x64)
    tcp echo server libuv
    VS2015编译boost1.62
    android rom开发
    游戏昵称
    乐观锁和悲观锁
    数据库锁机制
    MySQL事务实现原理
    MySQL事务
  • 原文地址:https://www.cnblogs.com/zhiyouwu/p/11765407.html
Copyright © 2020-2023  润新知