如何将Object类转换为实体类
作者:王星星的魔灯 发布时间:2021-11-05 04:45:11
标签: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;
}
来源:https://wxxlamp.blog.csdn.net/article/details/97901077


猜你喜欢
- zip 是一个非常常见的压缩包格式,本文主要用于说明如何使用代码 文件或文件夹压缩为 zip压缩包及其解压操作,我们采用的是 微软官方的实现
- 背景断点续传下载一直是移动开发中必不可少的一项重要的技术,同样的Rxjava和Retrofit的结合让这个技术解决起来更加的灵活,我们完全可
- Select Count(*)的返回值类型<select id="queryAlarmStatisticalAnalysis
- 本文实例为大家分享了Java实现五子棋游戏的具体代码,供大家参考,具体内容如下一、功能分析五子棋的实现还是较为简单的,通过下期的流程我们可以
- 上一篇:C# Redis学习系列一:Redis的认识、下载、安装、使用一.redis 设置密码使用下载好的 redis-cli.exe指令:
- 项目描述:这是一个基于SpringBoot+Vue框架开发的仿小米电子产品售卖商城系统。首先,这是一个前后端分离的项目,代码简洁规范,注释说
- 本文实例讲述了Java实现过滤掉map集合中key或value为空的值。分享给大家供大家参考,具体如下:import java.util.C
- CLR要求每一个类型都最终从object类型派生,如下: class Typer {} === class Typer :object {}
- 前言一切准备工作就绪时就先实现一个关注公众号后向客户端推送一条消息。关注后推送消息需要一个get请求、一个post请求,get请求主要是为了
- 一、前言最近在加强 ITAEM 团队的一个 app 项目——学生教师学习交流平台人员组成:安卓 + 前端 + 后台后台 DAO 层借鉴了华工
- 有时候我们需要在一个ArrayList的for循环中动态删除元素的需求, 废话不多说看代码List<Integer> list
- 优点1.装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。缺点2.多层装饰比较
- 一、任务和执行策略之间的隐性耦合Executor可以将任务的提交和任务的执行策略解耦只有任务是同类型的且执行时间差别不大,才能发挥最大性能,
- 本文实例为大家分享了Java实现简易计算器的具体代码,供大家参考,具体内容如下程序的运行环境为Windows10 ,编译环境为IDEA。计算
- 现在很多android的应用都采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,现在我采用TabHost组件来自定义一个
- 本文实例讲述了C#中的try catch finally用法。分享给大家供大家参考。具体分析如下:try中的程序块是有可能发生错误的程序块,
- 本文实例为大家分享了Java执行SQL脚本文件到数据库的具体方式,供大家参考,具体内容如下方式一:直接读取SQL脚本文件的内容,然后传递到S
- 首先,类只能使用public修饰是一个伪命题,应该说我们只见到过使用public修饰的类,还有一些类没有访问修饰符,此时访问权限为defau
- 1. 概述官方JavaDocsApi: javax.swing.JButtonJButton,按钮。JButton 常用构造方法:// 创建
- 字符, 字节与字符串字符与字符串字符串内部包含一个字符数组,String 可以和 char[] 相互转换.字符数组变为字符串:public