zoukankan      html  css  js  c++  java
  • Java 枚举类转json对象

    1.情景展示

     

      如上图所示,我想要将枚举类转换成json对象,key对应属性名称,value对应属性值,效果如下:

      {"IvcVoucherCode":"200","IvcVoucherStatus":"票据模板下载成功"} 

      如何实现?     

    2.代码实现

      思路:使用spring的org.springframework.beans.BeanWrapperImpl对对象的拆解

      所需jar包:

    <!--枚举类转json对象-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>5.2.7.RELEASE</version>
    </dependency>
    

      具体代码:

    /*
     * 枚举类转换为json对象
     * @attention:
     * @date: 2020年11月17日 0017 14:44
     * @param: anEnum
     * @param: initialUpper key的首字母是否大写
     *  true:大写,false:小写
     * @return: com.alibaba.fastjson.JSONObject
     */
    public static com.alibaba.fastjson.JSONObject fromEum(Enum anEnum, boolean initialUpper){
        com.alibaba.fastjson.JSONObject aliJson = new com.alibaba.fastjson.JSONObject();
        if(anEnum == null) return null;
        // json.put("enumName",anEnum.name());
    
        BeanWrapper src = new BeanWrapperImpl(anEnum);
        PropertyDescriptor[] pds = src.getPropertyDescriptors();
        for (PropertyDescriptor pd : pds) {
            String key = pd.getName();
            // 执行新一轮循环,不添加到json中
            if("class".equals(key) || "declaringClass".equals(key)){
                continue;
            }
            if (initialUpper) {
                aliJson.put(StringUtils.convertInitialUpper(key),src.getPropertyValue(key));
            } else {
                aliJson.put(key,src.getPropertyValue(key));
            }
        }
        log.debug("枚举转json对象前:" + anEnum.toString());
        log.debug("枚举转json对象后:" + aliJson);
        return aliJson;
    }
    

      由于枚举的成员变量名称,首字母都是大写,而使用BeanWrapper后,首字母会被转成小写,所以我增加了对于大写的支持。

      关于首字母转大写的代码,见文末推荐

    3.测试

    写在最后

      哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

     相关推荐:

  • 相关阅读:
    程序猿财务自由之路·规划篇
    如何教女友学编程?
    粤港澳大湾区9城最新购房政策一览
    一个漂亮妹子的美团面试经历,4轮2小时,成功拿到Offer
    在北京的互联网公司工作多少年可以买房?
    这六个 MySQL 死锁案例,能让你理解死锁的原因!
    阿里双11:「线上全链路压测」完整经验分享
    千亿级公司低代码平台的测试体系介绍
    Weblogic
    30分钟?不需要,轻松读懂IL
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/13998807.html
Copyright © 2011-2022 走看看