ClassCastException-LinkedHashMap转换类型失败案例解决方法

报错的内容

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxx(实体类)

原因

通过前端axios传入两个参数{‘gym’:gym,‘date’:datevalue},后端Controller通过@RequestBody接收,因为是多参数且不能整合到一个实体类里,所以使用Map接收了数据,并调用gymUserService的方法将Map传入confirmOrder方法里。

@PostMapping("/confirm")
    public XX confirmOrder(@RequestBody Map<String,Object> params) {
        return gymUserService.confirmOrder(params);
    }

在confirmOrder方法中,我想将Map中的数据取出并赋值

	public XX confirmOrder(Map<String,Object> params){
	//错误信息告诉我,此时发生了错误 ClassCastExcetion
		Gym gym = (Gym)params.get('gym');
		Date date = (Date)params.get('datevalue');
	}

分析

通过报错的信息分析,ClassCastException是因为类型转换失败的运行时异常。
我通过Debug模式知道,Map中存放的所有对象都被自动转换成了LinkedHashMap类型。原因就是强制转换失败导致不能正常赋值而造成的异常。
但为什么强制转换失败暂时不知道,留着以后写吧

解决

通过网上的很多方案都是让我将Map中的对象转换为JSON字符串,再将JSON字符串转换为对象即可正常赋值。
ps:此处作用只是添加jar包,初学者看不懂就直接网上下载fastjsonjar包下载导入就可以了

//加入alibaba-fastjson依赖
	<dependency>
        <groupId>com.alibaba</groupId>
          	<artifactId>fastjson</artifactId>
          	<version>1.2.68</version>
    </dependency>

转换代码:

	/*
		JSON.toJSONString(Object obj)是将对象转换成JSON字符串
		JSON.parseObject(Stirng str,XX.class)将JSON字符串str转换为xx.class类型
	*/
	Gym gym = JSON.parseObject(JSON.toJSONString(params.get("gym")),Gym.class);
    Date date = JSON.parseObject(JSON.toJSONString(params.get("datevalue")),Date.class);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值