这篇文章主要介绍了如何将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;
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程学习网。
本文标题为:如何将Object类转换为实体类


基础教程推荐
- SpringBoot配置文件中密码属性加密的实现 2023-03-11
- Java File类的概述及常用方法使用详解 2023-05-18
- 全局记录Feign的请求和响应日志方式 2023-01-09
- Java使用EasyExcel进行单元格合并的问题详解 2023-01-18
- Project Reactor源码解析publishOn使用示例 2023-04-12
- Java去掉小数点后面无效0的方案与建议 2023-02-18
- 工厂方法在Spring框架中的运用 2023-06-23
- 一文了解Java 线程池的正确使用姿势 2023-06-17
- JVM分析之类加载机制详解 2023-04-06
- 用java实现扫雷游戏 2022-12-06