如何在对外接口中合理地使用枚举

news/2024/5/19 0:23:17 标签: 枚举, rpc, 阿里java手册

首先贴出阿里java开发手册华山版第39页的一句话
【强制】 二方库里可以定义枚举类型,参数可以使用枚举类型,但是接口返回值不允许使用
枚举类型或者包含枚举类型的 POJO 对象

关于这句话,讲一个业务场景:近期因业务发展,我们的一个系统需要增加一个枚举值,而某个接口的返回值直接使用了这个枚举。于是需要通知上游接口同步升级jar包,联调,上线。试想,如果这个枚举被10个接口使用,每个接口有10个上游系统调用,全部需要升级jar包上线;如果有20个接口…

于是我们目前采用了一种策略,在枚举类里提供根据code获取枚举的方法,并在接口回传参数时,只回传code,且允许null;上游接口使用时需要通过code获取枚举,可以直接使用枚举的name,也可以通过switch分支自定义name

package com.example.demo.guava;

import lombok.Getter;
import lombok.ToString;

import java.util.HashMap;
import java.util.Map;

/**
 * description
 *
 * @author xichengxml
 * @date @date 2019-10-30 10:57:59
 */
@Getter
@ToString
public enum GenderEnum {

	MALE("M", "男"),
	FEMALE("F", "女");

	private String code;

	private String name;

	private final static Map<String, GenderEnum> container;

	static {
		container = new HashMap<>();
		for(GenderEnum e : GenderEnum.values()) {
			container.put(e.getCode(), e);
		}
	}

	/**
	* 内部使用
	*/
	public static GenderEnum getEnum(String code) {
		return getEnum(code, false);
	}
	
	/**
	* 提供给外部使用
	*/
	public static GenderEnum getEnum(String code, boolean allowNull) {
		GenderEnum e = container.get(code);
		if (e == null && !allowNull) {
			throw new IllegalArgumentException("no enums code '" + code + "'. ");
		}
		return e;
	}
	
	GenderEnum(String code, String name) {
		this.code = code;
		this.name = name;
	}
}

package com.example.demo;

import com.example.demo.guava.GenderEnum;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.junit.Test;

/**
 * description
 *
 * @author xichengxml
 * @date 2019-10-30 11:02:24
 */
public class EnumTest {

	@Test
	public void test01() {
		// 上游接口调用下游业务接口返回
		Person person = getPerson();
		// 获取下游业务接口返回数据
		String genderCode = person.getGenderCode();
		GenderEnum genderEnum = GenderEnum.getEnum(genderCode, true);
		// 上游系统封装自己的实体类
		PageView pageView = new PageView();
		pageView.setUname(person.getUname());
		pageView.setGender(genderEnum.getName());
		System.out.println("response with enum: " + pageView);
	}

	/**
	 * 模拟下游业务接口实现
	 * 业务方法直接封装enum code
	 * @return
	 */
	private Person getPerson() {
		Person person = new Person();
		person.genderCode = GenderEnum.MALE.getCode();
		person.uname = "xicheng";
		return person;
	}

	/**
	* 模拟下游业务代码实体类
	*/
	@Getter
	@Setter
	private static class Person {
		private String uname;
		private String genderCode;
	}

	/**
	* 用于上游系统返回页面的实体
	*/
	@Getter
	@Setter
	@ToString
	private static class PageView {
		private String uname;
		private String gender;
	}
}


http://www.niftyadmin.cn/n/890959.html

相关文章

8、解决Linux无法上网的各种问题

最近发现Linux重新开机后无法上网&#xff0c;不仅不能ping通windows主机也不能上外网。 ifconfig后eth0也没有分配IP地址&#xff0c;总之各种问题都被我碰到了。现在来一一解决&#xff01; 1、没有分配到IP地址 开机后联网图标上有叉叉&#xff0c;ifconfig后eth0没有分配…

win10点击超链接无法跳转到浏览器

折腾了两天&#xff0c;各种百度google没找到解决方案&#xff0c;后来通过自己灵光一现解决了&#xff0c;解决方式&#xff1a; 重新设置一下默认浏览器&#xff1a; 打开windows设置功能&#xff0c;选择应用 将默认浏览器设置为其它浏览器&#xff0c;然后再切换回来&…

一张图说明白消息队列

Producer&#xff1a;消息生产者&#xff0c;负责产生和发送消息到 Broker&#xff1b; Broker&#xff1a;消息处理中心。负责消息存储、确认、重试等&#xff0c;一般其中会包含多个 queue&#xff1b; Consumer&#xff1a;消息消费者&#xff0c;负责从 Broker 中获取消息&…

jvm dump日志设置

阿里java手册华山版第39页&#xff1a; 【推荐】 给 JVM 环境参数设置-XX:HeapDumpOnOutOfMemoryError 参数&#xff0c;让 JVM 碰到 OOM 场景时输出 dump 信息 -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath$LOGS_DIR/jvm_dump.log

使用idea替代navicat做客户端管理mysql数据库

我们通常都是使用navicat等客户端管理数据库&#xff0c;但是这样的话在测试程序时需要不断的在idea和navicat之间切换&#xff0c;好在idea给我们提供了一种查询数据的快捷方式&#xff0c;可以直接连接和管理数据库 连接方式如下&#xff1a; 1. 2. 注意&#xff1a;这一步需…

字节顺序的大端和小端

例如变量x类型为int&#xff0c;位于地址0x100处&#xff0c;它的值为0x01234567&#xff0c;地址范围为0x100~0x103字节&#xff0c;其内部排列顺序依赖于机器的类型。大端法从首位开始将是&#xff1a;0x100: 01, 0x101: 23,…。而小端法将是&#xff1a;0x100: 67, 0x101: 4…

Notepad++添加读取十六进制插件HexEditor

下载地址&#xff1a;https://github.com/chcg/NPP_HexEdit/releases 安装方式&#xff1a; 下载压缩包&#xff0c;例如&#xff1a;HexEditor_0.9.5.19_x64.zip解压到本地目录&#xff0c;将文件夹更名为HexEditor打开Notepad&#xff0c;选中插件&#xff0c;打开插件文件夹…

使用git管理本地分支

项目开发久了&#xff0c;ide中会有很多本地分支&#xff0c;手动一个个去删除有点费力气&#xff0c;可以通过git命令快速删除本地分支 切换目录 cd your-project-name查看所有本地分支 git branch删除本地分支 git branch -d your-branch-name如果你本地有python环境&…