0


结合Hutool工具包,实现bean对象转map(支持驼峰转下划线)

文章目录


前言

hutool的中有方法

BeanUtil.beanToMap()

可以实现,但在实际应用过程中发现,如果要转换的对象中存在List类型的话,集合中的对象是不会转化为下划线格式的。本方法是为了解决这个问题。

BeanUtil.beanToMap()
staticMap<String,Object>beanToMap(Object bean,Map<String,Object> targetMap,boolean isToUnderlineCase,boolean ignoreNullValue)

一、Hutool

Hutool官网

二、代码

1.依赖包

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.5</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version><scope>provided</scope></dependency>

2.BeanMapUtils.class

@Slf4jpublicclassBeanMapUtils{/**
     * 将对象装换为map,支持驼峰命名转下划线
     * 支持hutool的@Alias注解
     * @param bean 要转换的类
     * @param isUnderscore 是否转成蛇形命名
     * @return
     */publicstaticMap<String,Object>bean2Map(Object bean,boolean isUnderscore){Map<String,Object> map;if(isUnderscore){String s =JSONUtil.toJsonStr(bean);
            bean =JSONUtil.parseObj(s);try{
                map =formatKey((JSONObject) bean,false);}catch(Exception e){
                log.error("bean2Map 对象装换为map出现错误!!!e:", e);thrownewCalcBusinessException("公共类错误");}}else{
            map =BeanUtil.beanToMap(bean,false,false);}return map;}/**
     * 转换为驼峰格式/转换为下划线方式
     *
     * @param json 等待转换的方法
     * @param upper 首字母大写或者小写
     * @return 转换后的
     */publicstaticJSONObjectformatKey(finalJSONObject json,boolean upper){JSONObject real =newJSONObject();for(String it : json.keySet()){Object objR = json.get(it);// 转换为驼峰格式String key =StrUtil.toUnderlineCase(it);// 首字母大写或者小写
            key = upper ?StrUtil.upperFirst(key):StrUtil.lowerFirst(key);if(objR instanceofJSONObject){
                real.set(key,formatKey((JSONObject) objR, upper));}elseif(objR instanceofJSONArray){JSONArray jsonA =newJSONArray();for(Object objA :(JSONArray) objR){
                    jsonA.add(formatKey((JSONObject) objA, upper));}
                real.set(key, jsonA);}else{
                real.set(key, objR);}}return real;}}

3.测试

MainTest.class

publicclassMainTest{/**
     * 测试bean2map
     */@Testpublicvoidtest(){BeanTest beanTest =BeanTest.builder().nameAge("nameage").ageName(BigDecimal.ONE).nameAgeTest("test2").testRest(CollUtil.newArrayList(BeanTest2.builder().nameAgeTest("2222").build())).build();Map<String,Object> map =BeanMapUtils.bean2Map(beanTest,true);Console.log(map);// 结果:{"name_age":"nameage","name_age_test2":"test2","age_name":1,"test_rest2":[{"nameAgeTest":"2222"}]}}}

BeanTest.class

@Data@NoArgsConstructor@AllArgsConstructor@BuilderpublicclassBeanTest{//@Alias("name_age")privateString nameAge;@Alias("name_age_test2")privateString nameAgeTest;//@Alias("age_name")privateBigDecimal ageName;@Alias("test_rest2")privateList<BeanTest2> testRest;privateList<Map<String,BigDecimal>> testMapList;}

BeanTest2.class

@Data@NoArgsConstructor@AllArgsConstructor@BuilderpublicclassBeanTest2{privateString nameAgeTest;privateBigDecimal ageNameTest;}

其他

formatKey()

方法是由网上的方法(原方法)改过来的,但这个方法有点问题,只支持string类型的转换。hutool在使用

JSONUtil.parseObj()

方法时,会将value转为

JSONArray

JSONObject

以及

BigDecimal(小数)

Integer(整数且在int范围内)

Long(整数且大于int范围)

Boolean(true or false)

String(其他)

标签: java json 编程语言

本文转载自: https://blog.csdn.net/tongatong/article/details/126655192
版权归原作者 童哇童 所有, 如有侵权,请联系我们删除。

“结合Hutool工具包,实现bean对象转map(支持驼峰转下划线)”的评论:

还没有评论