JAVA返回值设计

477 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情

返回值设计

返回值格式

统一JSON的格式返回,定义如下:

{
  "code": "string",
  "subCode":"string",
  "msg": "string",
  "result": {}
}

code为返回码,兼容已有代码,只有成功(0x00000000)和失败(0x80000000)两种code

subCode为明细返回码,标识详细错误编码

msg为返回信息描述,可以通过通配符{},来动态插入msg信息,具体见代码BaseResponsev1.java

result为返回值结果

返回码

  • 返回码定义的区间定义如下:
返回码范围描述
0x00000000处理成功
0x80000000处理失败

明细返回码

明细返回码,标识详细错误编码,由两部分构成,例如:0001.1000,

0001标识具体服务例如:建模服务、脚本引擎服务;

1000标识具体的错误原因代码

返回码范围描述
****.0x00000000处理成功
****.0x80000000处理失败
****.10000-19999服务不可用
****.20000-29999参数异常
****.20000-21999缺少参数
****.22000-23999数据不存在
****.24000-26999(暂留定义区间)
****.27000-29999其他异常
****.30000-39999用户权限异常
****.40000-49999接口异常

msg

msg为错误返回信息描述

result

result为返回值结果

代码实现介绍

枚举类

使用枚举类关联返回码与msg:

  1. ResultCodeEnum:数据返回中的code枚举类:

==这个类不需要修改,所有的错误编码都在ResultSubCode中定义==

package com.emcc.asset.response.v1;

/**
 * @Auther: wangwei
 * @Date: 2019-02-06 14:38
 * @Description:ResultCodeEnum数据返回的code公共枚举类
 */
public enum ResultCodeEnum {
    /**
     * 失败
     **/
    FAIL("0x80000000", "FAIL"),

    /**
     * 成功
     **/
    OK("0x00000000", "SUCCESS");
}
  1. ResultSubCode:数据返回中的code枚举类:

==1.根据具体的错误信息,在相应的模块里添加错误码,优先使用已存在的错误码,在创建的时候考虑通用性==

==2.在改类中定义了一个变量:PREFIX,在getSubCode()方法中作为前缀返回,如果创建了新的项目,该变量需要修改==

==返回码枚举要分区域按顺序填写!!!==

package com.emcc.asset.response.v1;

/**
 * @Auther: wangwei
 * @Date: 2019-02-06 14:38
 * @Description:ResultCodeEnum数据返回的code公共枚举类
 */
public enum ResultSubCodeEnum {
    /**
     * 失败
     **/
    FAIL("0x80000000", "FAIL"),

    /**
     * 成功
     **/
    OK("0x00000000", "SUCCESS")
  1. ResultSubCodePrefixEnum:ResultSubCode的前缀枚举:

==新的项目需要重新定义,并修改ResultSubCode中的Prefix值==

package com.emcc.asset.response.v1;

/**
 * @Auther: wangwei
 * @Date: 2019-02-06 14:38
 * @Description:ResultSubCode的前缀枚举
 */
public enum ResultSubCodePrefixEnum {
    /**
     * 失败
     **/
    MODEL_SERVER("0001","建模工具");

    private String code;
    private String msg;

    ResultSubCodePrefixEnum(final String code, final String msg) {
        this.code = code;
        this.msg = msg;
    }
    public String getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }
}

返回值

  1. BaseResponsev1:根据返回值定义和枚举类,构建统一的返回类: 公共类提供一下几个static方法:
  • basicResult:最基础的方法,包含所有的构造信息
  • ok():成功-没有返回值
  • ok(Object data):成功-有返回值
  • fail(ResultSubCodeEnum resultSubCodeEnum, String... msgVars):失败-失败代码(必选)+失败信息参数(可选)
  • failApiError(String exceptionMsg):针对API异常封装的失败,只需要填写异常的信息e.getMessage()。异常信息是否打印可以配置,默认打印。大部分未解析的异常(比如数据库返回的异常)可以使用这个方法修改,例如:
catch (Exception e) {
		return BaseResponsev1.failApiError(e.getMessage());
	}
  • failWithResult(ResultSubCodeEnum resultSubCodeEnum, Object data):失败-有返回值的失败,预设