开箱即用系列-工具包-枚举转JSON

本文介绍了一种将枚举类型转换为JSON字符串的方法,利用Guava和Lombok库简化了枚举转JSON的过程,适用于需要处理枚举属性值的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用背景:

  1. 接口返回数据中,有枚举,并且需要获取枚举的属性值的时候.
  2. 对象中包含枚举,要转JSON字符串的时候.

枚举转JSON实现:

maven依赖:
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>22.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
代码实现:

import com.bruce.tool.common.util.ClassUtils;
import com.google.common.collect.Lists;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.List;
import java.util.Map;
import java.util.Objects;

@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class EnumHandler {

    /**单个枚举转json**/
    public static String toJson(Object object){
        return JsonUtils.objToStr(toMap(object));
    }

    /**枚举类型-转json字符串**/
    public static String toJson(Object ... enums){
        return JsonUtils.objToStr(toList(enums));
    }

    /**单个枚举转map**/
    public static Map toMap(Object object){

        if( Objects.isNull(object) ){ return null; }

        Class<?> clazz = object.getClass();
        if( !clazz.isEnum() ){ return null; }

        // 获取自定义属性
        List<Field> selfFields = fetchSelfFields(clazz);

        // 获取自定义属性值
        return fetchFieldValues(selfFields, object);
    }

    /**枚举类型-转json字符串**/
    public static List<Map> toList(Object ... enums){

        if(Objects.isNull(enums) ){ return Lists.newArrayList();}

        if(enums.length == 0){ return Lists.newArrayList(); }

        Class<?> clazz = enums[0].getClass();
        if( !clazz.isEnum() ){ return Lists.newArrayList(); }

        // 获取自定义属性
        List<Field> selfFields = fetchSelfFields(clazz);

        List<Map> jsons = Lists.newArrayList();

        for (Object item : enums) {
            jsons.add(fetchFieldValues(selfFields, item));
        }

        return jsons;
    }

    /**获取枚举的自定义属性**/
    private static List<Field> fetchSelfFields(Class<?> clazz) {
        List<Field> fields = ClassUtils.getAllFields(clazz);
        List<Field> selfFields = Lists.newArrayList();
        for (Field field : fields) {

            int modifiers = field.getModifiers();

            if(Modifier.isStatic(modifiers)){ continue; }// 静态的属性不要

            if(Modifier.isFinal(modifiers)){ continue; }// final的属性不要

            selfFields.add(field);
        }
        return selfFields;
    }

    /**获取自定义属性值**/
    private static MapHandler fetchFieldValues(List<Field> selfFields, Object item) {
        MapHandler handler = MapHandler.build();
        for (Field field : selfFields) {
            String name = field.getName();
            Object value = ClassUtils.getValue(item,name);
            handler.add(name, value);
        }
        return handler;
    }
    
}

补充说明:

代码中使用到的ClassUtils是我自己的工具类,使用的时候,可以自己实现:
ClassUtils.getAllFields(clazz)   ---> 获取类所有属性字段
ClassUtils.getValue(item,name)  --->根据字段名,获取对象中的字段值

若有改进建议,欢迎留言.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值