首页 > 编程知识 正文

根据枚举值获取枚举对象,遍历枚举类所有枚举值

时间:2023-05-06 00:08:33 阅读:272446 作者:3250

        在实际项目中,有很多用到枚举的地方,比如状态 类别等,很多时候在列表查询的时候,这些状态都是作为查询条件的,所以就需要前端老哥发请求到后台来查询枚举值,这里需要注意了,一般情况下,别让前端老哥写死了,这是很不科学的,要是啥时候状态枚举一改变,前端忘记改了,那你就等着凉凉吧

其实查询很简单:

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方法 就可以了

返回结果:

这样前端就可以得到这个枚举里面的所有枚举值了.

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。