文章目录

  • 前言
  • 一、Hutool
  • 二、代码
    • 1.依赖包
    • 2.BeanMapUtils.class
    • 3.测试
      • MainTest.class
      • BeanTest.class
      • BeanTest2.class
  • 其他

前言

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

static Map<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

@Slf4j
public class BeanMapUtils {/*** 将对象装换为map,支持驼峰命名转下划线* 支持hutool的@Alias注解* @param bean 要转换的类* @param isUnderscore 是否转成蛇形命名* @return*/public static Map<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);throw new CalcBusinessException("公共类错误");}}else {map = BeanUtil.beanToMap(bean, false, false);}return map;}/*** 转换为驼峰格式/转换为下划线方式** @param json 等待转换的方法* @param upper 首字母大写或者小写* @return 转换后的*/public static JSONObject formatKey(final JSONObject json, boolean upper) {JSONObject real = new JSONObject();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 instanceof JSONObject) {real.set(key, formatKey((JSONObject) objR, upper));}else if (objR instanceof JSONArray) {JSONArray jsonA = new JSONArray();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

public class MainTest {/*** 测试bean2map*/@Testpublic void test() {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
@Builder
public class BeanTest {//@Alias("name_age")private String nameAge;@Alias("name_age_test2")private String nameAgeTest;//@Alias("age_name")private BigDecimal ageName;@Alias("test_rest2")private List<BeanTest2> testRest;private List<Map<String, BigDecimal>> testMapList;}

BeanTest2.class

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class BeanTest2 {private String nameAgeTest;private BigDecimal ageNameTest;
}

其他

formatKey()方法是由网上的方法(原方法)改过来的,但这个方法有点问题,只支持string类型的转换。hutool在使用JSONUtil.parseObj()方法时,会将value转为JSONArrayJSONObject以及BigDecimal(小数)Integer(整数且在int范围内)Long(整数且大于int范围)Boolean(true or false)String(其他)

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

  1. 【guava】 谷歌guava工具包的常用方法 双key的map 、驼峰转下划线等小结

    文章目录 1. maven引入 (某些框架会引入guava 注意版本冲突问题) 2. guava 对集合的处理 3. guava的 双键table (双key map) 4. guava的文件读写 代 ...

  2. java cglib map转bean_Java工具集-Bean对象与Map集合相互转换工具

    代码示例 package com.simple.util.bean; import org.springframework.cglib.beans.BeanMap; import java.util. ...

  3. hutool工具包快速入门

    这里写自定义目录标题 **注意:对hutool工具包进行一个快速入门,主要通过里面几个比较常用的Util来分析.** 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定 ...

  4. 用cn.hutool工具包进行图片上传下载示例

    文章目录 实体类 controller service 数据转换的工具类 file工具类 Hutool-http针对JDK的HttpUrlConnection做一层封装,简化了HTTPS请求.文件上传 ...

  5. Hutool工具包Excel工具使用

    参考自:https://blog.csdn.net/qq_43230007/article/details/107216171 一.导入依赖 <!-- hutool工具类依赖--> < ...

  6. 自定义通配器导入bean对象

    1.CustomerImportSelector工具类: /*** @description : 自动导入器* @author : wanYunBo* @date : 2021-09-02 20:46 ...

  7. Spring源码分析-如何获取Bean对象

    导语   在上篇博客中 介绍了关于BeanFactory和FactoryBean相关的操作,并且查看了在两个操作中他们具体的代码有那些,这篇博客主要就是顺着上篇博客思路继续来分析Bean对象的获取.下 ...

  8. Java POJO Bean 对象与 Web Form 表单的自动装配

    PS: 我一直在找寻为什么 struts2有自动将form字段和getter setter 自动 匹配的功能, 这篇文章解答了我的疑惑 深度剖析:Java POJO Bean 对象与 Web Form ...

  9. java vo转map_javabean实体类对象转为Map类型对象的方法(转发)

    //将javabean实体类转为map类型,然后返回一个map类型的值 public static Map beanToMap(Object obj) { Map params = new HashM ...

最新文章

  1. Silverlight – Datagrid,Dataform数据验证和ValidationSummary
  2. 移动银行木马活跃度升级 恐成黑客攻击跳板
  3. java面向对象(二)之继承
  4. 好看的php验证码,一漂亮的PHP图片验证码实例
  5. Core Java Volume I — 3.6. Strings
  6. 欢乐纪中某A and B组赛【2019.1.23】
  7. 推荐安卓开发神器(里面有各种UI特效和实例)
  8. 华为交换机重制_华为交换机重置命令
  9. ajax修改属性后如何遍历,Ajax遍历jSon后对每一条数据进行相应的修改和删除(代码分享)...
  10. 简单python脚本实例-30个Python 小例子,帮你快速上手Python
  11. 爬虫日记(71):用OCR来对抗字体反爬
  12. 三角诱导公式 两角和与差 二倍角公式 降幂公式 半角公式 万能公式 积化和差公式 和差化积公式
  13. ppt 插入柱状图及基础功能调整
  14. 显著性检验--学习笔记
  15. “特困生”卷出睡眠市场,疯狂氪金能不能氪出“好故事”?
  16. C++Comb Sort梳排序的实现算法(附完整源码)
  17. javascript javascript面向对象的理解及简单的示例
  18. 机构报告称重庆南京等成为返乡置业热门城市
  19. JAVA学习笔记-surper
  20. 解决w950播放RM视频的问题[转]

热门文章

  1. 基于surf的特征点匹配C语言源码
  2. Linux查看进程id
  3. JDK8之Comparator
  4. 星特朗望远镜怎么样_星特朗天文望远镜怎么样哪个系列好
  5. 小程序框架 uni-app 工作原理
  6. 科研笔记10:分子结构的数据库、软件
  7. 记一次网站攻击到提权的全部过程
  8. 水溶性近红外Ⅱ区荧光Ag2Te量子点的合成,近红外二区量子点荧光染料激发1000nm以上
  9. java 微信 下载对账单_java下载微信对账单,实现与微信实收对账和日清日结对账...
  10. node.js基础了解