在实际项目中,有很多用到枚举的地方,比如状态 类别等,很多时候在列表查询的时候,这些状态都是作为查询条件的,所以就需要前端老哥发请求到后台来查询枚举值,这里需要注意了,一般情况下,别让前端老哥写死了,这是很不科学的,要是啥时候状态枚举一改变,前端忘记改了,那你就等着凉凉吧
其实查询很简单:
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方法并且序列化
@Getterpublic 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方法 就可以了
返回结果:
这样前端就可以得到这个枚举里面的所有枚举值了.