在实际项目中,有很多用到枚举的地方,比如状态 类别等,很多时候在列表查询的时候,这些状态都是作为查询条件的,所以就需要前端老哥发请求到后台来查询枚举值,这里需要注意了,一般情况下,别让前端老哥写死了,这是很不科学的,要是啥时候状态枚举一改变,前端忘记改了,那你就等着凉凉吧
其实查询很简单:
1.写一个公共接口给前端老哥
@RestController
@RequestMapping("/enum/")
@Api(value = "枚举", tags = "系统枚举")
public class EnumController {
@GetMapping("list")
public ReplyJsonUtil getEnumList(@Param("name") String name) {
try {
String[] names = name.split(",");
Map<String, List<Object>> maps = new HashMap<>();
for (String nm : names) {
String enumPackage = "com.dph.finance.enums";
Class<Enum> clazz = (Class<Enum>) Class.forName(enumPackage + "." + nm);
Enum[] objs = clazz.getEnumConstants();
List<Object> ls = new ArrayList<>();
for (Enum obj : objs) {
ls.add(obj);
}
maps.put(nm, ls);
}
return ReplyJsonUtil.success("枚举解析成功", maps);
} catch (Exception e) {
return ReplyJsonUtil.fail("枚举解析失败");
}
}
}
注意 枚举一般都是放在统一的位置,所以我这里可以这样写,如果你的不一样,就随机应变 代码也很简单 我就不过多解释了
这样前端老哥想要知道哪几个枚举的所有值,我只需要把枚举值名称给他,他就直接把名称带着来后台查询就好了,多个枚举的话以逗号隔开就ok了,然后注意你的枚举一定要有get方法
1.枚举没加get方法,并且没有实例化,
//没有get方法和序列化的枚举
public enum ApplicationPurchseOrderStatus {
UNCHECKED("unchecked", "待审核"),
STORECHECK("storecheck", "囤货审核"),
LENDING("lending", "放款中"),
UNSHIPPED("unshipped", "待发货"),
UNRECEIVED("unreceived", "待收货"),
FINISHED("finished", "已完成"),
INVALID("invalid", "已作废");
}
返回结果
只返回了枚举值,code和message都没有返回.
2.加了get方法并且序列化
@Getter
public enum PeriodLoanBillEnum implements BaseEnum{
WAIT_REPAY("WAIT_REPAY", "待还款"),
PARTIAL_REPAY("PARTIAL_REPAY", "部分还款中"),
ALL_REPAY("ALL_REPAY", "全额还款中"),
PARTIAL_SETTLED("PARTIAL_SETTLED", "部分结清"),
ALREADY_SETTLED("ALREADY_SETTLED", "已结清"),
NOT_SETTLED("NOT_SETTLED", "未结清"),
;
/**
* 枚举值码
*/
private final String code;
/**
* 枚举描述
*/
private final String message;
}
BaseEnum
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public interface BaseEnum {
}
@JsonFormat就可以实现对枚举值以对象的方式进行序列化 你可以把枚举的每个枚举值看做是一个对象,因为每个枚举值都有code和message属性 再为其code和message属性添加get方法 就可以了
返回结果:
这样前端就可以得到这个枚举里面的所有枚举值了.