电商商城定制开发结合Hutool工具包,实现bean对象转map(支持驼峰转下划线)

文章目录


前言

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

static Map<String,Object>	beanToMap(Object bean, Map<String,Object> targetMap, boolean isToUnderlineCase, boolean ignoreNullValue)
  • 1

一、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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.BeanMapUtils.class

@Slf4jpublic 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;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

3.测试

MainTest.class

public class MainTest {    /**     * 测试bean2map     */    @Test    public 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"}]}    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

BeanTest.class

@Data@NoArgsConstructor@AllArgsConstructor@Builderpublic 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;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

BeanTest2.class

@Data@NoArgsConstructor@AllArgsConstructor@Builderpublic class BeanTest2 {    private String nameAgeTest;    private BigDecimal ageNameTest;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

其他

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

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发