0


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

文章目录


前言

hutool的中有方法

  1. BeanUtil.beanToMap()

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

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

一、Hutool

Hutool官网

二、代码

1.依赖包

  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

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

3.测试

MainTest.class

  1. publicclassMainTest{/**
  2. * 测试bean2map
  3. */@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

  1. @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

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

其他

  1. formatKey()

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

  1. JSONUtil.parseObj()

方法时,会将value转为

  1. JSONArray

  1. JSONObject

以及

  1. BigDecimal(小数)

  1. Integer(整数且在int范围内)

  1. Long(整数且大于int范围)

  1. Booleantrue or false

  1. String(其他)

标签: java json 编程语言

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

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

还没有评论