结合Hutool工具包,实现bean对象转map(支持驼峰转下划线)
文章目录
- 前言
- 一、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转为JSONArray
、JSONObject
以及BigDecimal(小数)
、Integer(整数且在int范围内)
、Long(整数且大于int范围)
、Boolean(true or false)
、String(其他)
。
结合Hutool工具包,实现bean对象转map(支持驼峰转下划线)相关推荐
- 【guava】 谷歌guava工具包的常用方法 双key的map 、驼峰转下划线等小结
文章目录 1. maven引入 (某些框架会引入guava 注意版本冲突问题) 2. guava 对集合的处理 3. guava的 双键table (双key map) 4. guava的文件读写 代 ...
- java cglib map转bean_Java工具集-Bean对象与Map集合相互转换工具
代码示例 package com.simple.util.bean; import org.springframework.cglib.beans.BeanMap; import java.util. ...
- hutool工具包快速入门
这里写自定义目录标题 **注意:对hutool工具包进行一个快速入门,主要通过里面几个比较常用的Util来分析.** 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定 ...
- 用cn.hutool工具包进行图片上传下载示例
文章目录 实体类 controller service 数据转换的工具类 file工具类 Hutool-http针对JDK的HttpUrlConnection做一层封装,简化了HTTPS请求.文件上传 ...
- Hutool工具包Excel工具使用
参考自:https://blog.csdn.net/qq_43230007/article/details/107216171 一.导入依赖 <!-- hutool工具类依赖--> < ...
- 自定义通配器导入bean对象
1.CustomerImportSelector工具类: /*** @description : 自动导入器* @author : wanYunBo* @date : 2021-09-02 20:46 ...
- Spring源码分析-如何获取Bean对象
导语 在上篇博客中 介绍了关于BeanFactory和FactoryBean相关的操作,并且查看了在两个操作中他们具体的代码有那些,这篇博客主要就是顺着上篇博客思路继续来分析Bean对象的获取.下 ...
- Java POJO Bean 对象与 Web Form 表单的自动装配
PS: 我一直在找寻为什么 struts2有自动将form字段和getter setter 自动 匹配的功能, 这篇文章解答了我的疑惑 深度剖析:Java POJO Bean 对象与 Web Form ...
- java vo转map_javabean实体类对象转为Map类型对象的方法(转发)
//将javabean实体类转为map类型,然后返回一个map类型的值 public static Map beanToMap(Object obj) { Map params = new HashM ...
最新文章
- Silverlight – Datagrid,Dataform数据验证和ValidationSummary
- 移动银行木马活跃度升级 恐成黑客攻击跳板
- java面向对象(二)之继承
- 好看的php验证码,一漂亮的PHP图片验证码实例
- Core Java Volume I — 3.6. Strings
- 欢乐纪中某A and B组赛【2019.1.23】
- 推荐安卓开发神器(里面有各种UI特效和实例)
- 华为交换机重制_华为交换机重置命令
- ajax修改属性后如何遍历,Ajax遍历jSon后对每一条数据进行相应的修改和删除(代码分享)...
- 简单python脚本实例-30个Python 小例子,帮你快速上手Python
- 爬虫日记(71):用OCR来对抗字体反爬
- 三角诱导公式 两角和与差 二倍角公式 降幂公式 半角公式 万能公式 积化和差公式 和差化积公式
- ppt 插入柱状图及基础功能调整
- 显著性检验--学习笔记
- “特困生”卷出睡眠市场,疯狂氪金能不能氪出“好故事”?
- C++Comb Sort梳排序的实现算法(附完整源码)
- javascript javascript面向对象的理解及简单的示例
- 机构报告称重庆南京等成为返乡置业热门城市
- JAVA学习笔记-surper
- 解决w950播放RM视频的问题[转]