如何将Object类转换为实体类

 更新时间:2022年08月18日 16:45:54   作者:王星星的魔灯  
这篇文章主要介绍了如何将Object类转换为实体类,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

将Object类转换为实体类

问题描述

在用SpringBoot写controller的时候,需要接受一个map的Object,之后要把Object转为特定的类,代码如下:

public boolean postArticle(@RequestBody Map<String, Object> map) {
        ArticleInfo articleInfo = (ArticleInfo) map.get("articleInfo");
        ArticleContent articleContent = (ArticleContent) map.get("articleContent");
        System.out.println(articleInfo + " " + articleContent);
        return true;
}

之后爆出异常:

java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class 
cn.zi10ng.blog.domain.ArticleInfo (java.util.LinkedHashMap is in module java.base of loader
 'bootstrap'; cn.zi10ng.blog.domain.ArticleInfo is in unnamed module of loader 
 org.springframework.boot.devtools.restart.classloader.RestartClassLoader @19b54dc3)

问题原因

map中取出的是Object,不能直接把Object转为特定的实体类

解决办法

需要通过json来作为中间介质:

   public boolean postArticle(@RequestBody Map<String, Object> map) throws IOException {

        ObjectMapper objectMapper = new ObjectMapper();
        String jsonInfo = objectMapper.writeValueAsString(map.get("articleInfo"));
        String jsonContent = objectMapper.writeValueAsString(map.get("articleContent"));
        ArticleInfo articleInfo = objectMapper.readValue(jsonInfo,ArticleInfo.class);
        ArticleContent articleContent = objectMapper.readValue(jsonContent,ArticleContent.class);

        System.out.println(articleContent + " " +articleInfo);
        return articleService.insertArticle(articleInfo,articleContent);
    }

实体类之间的相互转换

public static <A, B> B beanA2beanB(A beanA, Class<B> bClass, String... ignoreProperties) {
        try {
            B b = bClass.newInstance();
            cn.hutool.core.bean.BeanUtil.copyProperties(
                    beanA,
                    b,
                    CopyOptions.create().setIgnoreProperties(ignoreProperties).ignoreError().ignoreNullValue()
            );
            return b;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return (B) new Object();
    }

    /**
     * 可实现由 BeanA List 转换为 BeanB List<br>
     * tip1: 转换的规则是 实体内属性一致的进行转换<br>
     * tip2: 转换会忽略 Null 和错误
     *
     * @param listA            A 实体
     * @param bClass           B 类
     * @param ignoreProperties 要忽略转换的字段 数组类型<br>
     *                         由该属性可解决同一个Vo 在不同需求中要返回的实体不一致问题 列入UserListVO 在后台和前台使用的列表是同一个,但是返回的字段不一致
     * @param <A> 泛型A
     * @param <B> 泛型
     * @return 转换后的BList实体
     */
    public static <A, B> List<B> listA2ListB(Collection<A> listA, Class<B> bClass, String... ignoreProperties) {
        List<B> listB = new ArrayList<>();
        if (ObjectUtils.isEmpty(listA)) {
            return listB;
        }
        try {
            for (A a : listA) {
                listB.add(beanA2beanB(a, bClass, ignoreProperties));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return listB;
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java关于后端怎么去接收Date、LocalDateTime类型的参数详解

    Java关于后端怎么去接收Date、LocalDateTime类型的参数详解

    这篇文章主要介绍了java关于后端怎么去接收Date、LocalDateTime类型的参数,文中有详细的代码流程,对我们学习或工作有一定的参考价值,需要的朋友可以参考下
    2023-06-06
  • 老生常谈Java字符串进阶(必看篇)

    老生常谈Java字符串进阶(必看篇)

    下面小编就为大家带来一篇老生常谈Java字符串进阶(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Java基于分治法实现的快速排序算法示例

    Java基于分治法实现的快速排序算法示例

    这篇文章主要介绍了Java基于分治法实现的快速排序算法,结合实例形式分析了java基于分治法的快速排序相关实现技巧,代码中备有较为详细的注释说明便于理解,需要的朋友可以参考下
    2017-12-12
  • Mybatis图文并茂讲解分页插件

    Mybatis图文并茂讲解分页插件

    使用过mybatis的人都知道,mybatis本身就很小且简单,sql写在xml里,统一管理和优化。缺点当然也有,比如我们使用过程中,要使用到分页,如果用最原始的方式的话,1.查询分页数据,2.获取分页长度,也就是说要使用到两个方法才能完成分页
    2022-07-07
  • 详解Mybatis中的CRUD

    详解Mybatis中的CRUD

    这篇文章主要介绍了Mybatis中的CRUD的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Mybatis-plus动态条件查询QueryWrapper的使用案例

    Mybatis-plus动态条件查询QueryWrapper的使用案例

    mybatis-plus框架功能很强大,把很多功能都集成了,下面这篇文章主要给大家介绍了关于Mybatis-plus动态条件查询QueryWrapper的使用教程,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Java并发之串行线程池实例解析

    Java并发之串行线程池实例解析

    这篇文章主要介绍了Java并发之串行线程池实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • 浅谈synchronized方法对非synchronized方法的影响

    浅谈synchronized方法对非synchronized方法的影响

    下面小编就为大家带来一篇浅谈synchronized方法对非synchronized方法的影响。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Java 类与对象详细

    Java 类与对象详细

    这篇文章主要介绍了Java 类与对象,在Java中,我们把对象的特征称为属性,对象的用途称为方法,具有相同属性和方法的对象,我们把他们归为一类,简称类。下面文章讲详细介绍什么是Java类与对象,需要的朋友可以参考一下
    2021-10-10
  • 详解java中的Collections类

    详解java中的Collections类

    这篇文章主要为大家详细介绍了java中的Collections类,感兴趣的小伙伴们可以参考一下
    2016-07-07

最新评论