【Java】“com.alibaba.fastjson.JSONObject cannot be cast to“报错问题

这篇具有很好参考价值的文章主要介绍了【Java】“com.alibaba.fastjson.JSONObject cannot be cast to“报错问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Java】修复"com.alibaba.fastjson.JSONObject cannot be cast to"报错问题

报错如下:

java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.coding.lable.dto.HealthFilterNodeDto
	at com.coding.lable.service.impl.ReptLabelsServiceImpl.filterFormulaCompute(ReptLabelsServiceImpl.java:240)
	at com.coding.lable.service.impl.ReptLabelsServiceImpl.lambda$labelUserRept$1(ReptLabelsServiceImpl.java:187)
	at java.util.ArrayList.forEach(ArrayList.java:1257)
	at com.coding.lable.service.impl.ReptLabelsServiceImpl.labelUserRept(ReptLabelsServiceImpl.java:168)
	at com.coding.lable.service.impl.ReptLabelsServiceImpl$$FastClassBySpringCGLIB$$e754d10b.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:366)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)

通过 debug 断点可以看到,这里拿到虽然是 List,但是里面的对象还是一个 JSONObject,并不是需要的 DTO 类,所有导致了后面的报错。

// 反序列化
List<HealthFilterNodeDto> expressions = (List<HealthFilterNodeDto>) JSON.parse(filterFormula.getExpression());
healthFilterFormulaDto.setExpressions(expressions);

【Java】“com.alibaba.fastjson.JSONObject cannot be cast to“报错问题,Java技术栈,开发实践,java,servlet,spring
查到问题根源,只要把这里的对象转化为 DTO 类就行了,就可以避免报错。

增加代码:

// 反序列化
List<HealthFilterNodeDto> expressions = JSON.parseArray(JSON.toJSONString(filterFormula.getExpression()), HealthFilterNodeDto.class);
healthFilterFormulaDto.setExpressions(expressions);

我的json "[{},{}]" 已经存为字符串所以改写这样:文章来源地址https://www.toymoban.com/news/detail-543354.html

List<HealthFilterNodeDto> expressions = new ArrayList<>(JSON.parseArray(filterFormula.getExpression(), HealthFilterNodeDto.class));
                healthFilterFormulaDto.setExpressions(expressions);

到了这里,关于【Java】“com.alibaba.fastjson.JSONObject cannot be cast to“报错问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JSONObject详解(com.alibaba)-fastjson

    JSONObject只是一种数据结构,可以理解为JSON格式的数据结构(key-value 结构),可以使用put方法给json对象添加元素。JSONObject可以很方便的转换成字符串,也可以很方便的把其他对象转换成JSONObject对象。 pom(本文所有代码仅使用这一个依赖即可): dependencies dependency groupIdcom.aliba

    2024年02月14日
    浏览(44)
  • SpringBoot报错java.time.LocalDateTime cannot be cast to java.sql.Timestamp] with root cause

    最近在做系统升级,原本的版本为 SpringBoot2.1.8RELEASE ,升级后版本为 SpringBoot2.7.0 升级后原代码报错java.time.LocalDateTime cannot be cast to java.sql.Timestamp] with root cause。 经检查,原代码部分数据使用Map接收数据库返回数据,使用Map.get()取出 Object 对象后强制转化为了 Date 类型。 升级

    2023年04月08日
    浏览(52)
  • 从数据库中取时间值,报错:java.sql.Timestamp cannot be cast to java.lang.Long

    1、问题描述 将数据库中的查询到的 timestamp类型的数据,转成 Long类型报错。 2、解决方案 因为 java.sql.Timestamp 是 java.util.Date 的子类; 所以,直接 将 java.sql.Timestamp 转换为 java.util.Date 类型 即可。 或者将数据转成String类型输出: DateUtil 工具类如下:

    2024年02月15日
    浏览(47)
  • Tomcat报错:cannot be cast to class java.util.Map (java.io.ObjectStreamClass$Caches$1 and java.util.Map

    启动tomcat时会报如下错误,原因是tomcat与jdk的版本不匹配。当然要因情况而异,给大家一个解决方法的思路 这是从tomcat官方文档中找到对应的jdk版本 后记 并不是tomcat与jdk版本匹配就一定不会问题,产生这个问题是我启动activiti-app时发生的,当时我的tomcat是9,JDK是11后来又换

    2024年01月21日
    浏览(40)
  • java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to*****

    原报错代码写法: 报错如下: java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.* . 通过调试,发现是LinkedHashMap类型,而不是实体类 解决方法如下: 引入: import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; 调试: 问题解决。

    2024年02月04日
    浏览(50)
  • java.lang.String cannot be cast to java.lang.Integer异常

    在java中无法直接将String类型强制转换为Integer类型。 Java中的String和Integer是两种不同的数据类型,它们之间不能直接进行强制类型转换。这主要是因为它们在底层的表示方式和数据结构上有很大的差别。 String是一个不可变的字符序列,用于表示文本数据。它是通过字符数组来

    2024年02月05日
    浏览(43)
  • java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType解决方案

    异常:java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType 类型转换异常 主要是因为泛型使用不规范导致的错误,在MVP抽取中,我们需要懂得许多关联在一起的流程! 意思是Class类型不能转换成ParameterizedType类型,多出现于数据解析,泛型使用。先写的泛型,导致传回来的是

    2024年02月15日
    浏览(68)
  • 全网详细解决java.lang.ClassCastException: xxx类型 cannot be cast to xxx类型

    xxx类型 可以为如下类型: 我们自定义的类: Student 类 Project 类 Person 类 …等等 基本变量的包装类: int 的包装类 Integer long 的包装类 Long float 的包装类 Float …等等 字符串 String 类型 今天在写如下代码:

    2024年02月07日
    浏览(63)
  • 使用ResponseBodyAdvice返回值为String出现cannot be cast to java.lang.String异常

    背景 由于项目中为了全局返回统一的JSON格式,使用ResponseBodyAdvice进行拦截,拦截的时候会将返回的信息统一一个对象返回到前端。但是有的同事将一个String的响应对象返回,结果报错 com.example.demoweb.config.ApiResponse cannot be cast to java.lang.String ResponseBodyAdvice 拦截器实现 ServletR

    2024年02月13日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包