java.lang.ClassCastException的问题解决

 更新时间:2024年06月27日 09:22:45   作者:蒾酒  
本文主要介绍了java.lang.ClassCastException的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

问题

前后端分离开发中,往往需要统一封装返回数据用到一个Result<T>类包装多个接口:

重复劳动并不优雅,于是想用@RestControllerAdvice做控制器拦截增强,进行封装。

代码如下:

@RestControllerAdvice(basePackages = "com.mijiu.controller")
@NonNullApi
public class ResultAdvice implements ResponseBodyAdvice<Object> {
  
    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        return true;
    }

    @Override
    public Object beforeBodyWrite(@Nullable Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        return Result.success(body);
    }
}

supports直接返回true代表全部拦截进行封装。

于是开始测试这个返回String类型的接口

结果:

抛出了这个类强制转换异常:

java.lang.ClassCastException

研究了一下得出了原因

原因

封装的统一响应AOP对返回的数据进行了封装,而Controller层返回的数据类型定义为String类型。导致响应解析器转换报错。目前发现仅仅对String类型抛出该异常。

解决方案

判断body类型是String则进行手动转换

@Override
    public Object beforeBodyWrite(@Nullable Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        if(body instanceof String){
            return JSONUtil.toJsonStr(Result.success(body));
        }

        return Result.success(body);
    }

重启项目再次调试。

成功,问题解决!

到此这篇关于java.lang.ClassCastException的问题解决的文章就介绍到这了,更多相关java.lang.ClassCastException内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringCloud微服务调用丢失请求头的问题及解决方案

    SpringCloud微服务调用丢失请求头的问题及解决方案

    在Spring Cloud 中微服务之间的调用会用到Feign,但是在默认情况下,Feign 调用远程服务存在Header请求头丢失问题,下面给大家分享SpringCloud微服务调用丢失请求头的问题及解决方案,感兴趣的朋友一起看看吧
    2024-02-02
  • 简单了解4种分布式session解决方案

    简单了解4种分布式session解决方案

    这篇文章主要介绍了简单了解4种分布式session解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • idea打不开双击IDEA图标没反应的快速解决方案

    idea打不开双击IDEA图标没反应的快速解决方案

    这篇文章主要介绍了idea打不开双击IDEA图标没反应的快速解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Spring实战之获得Bean本身的id操作示例

    Spring实战之获得Bean本身的id操作示例

    这篇文章主要介绍了Spring实战之获得Bean本身的id操作,结合实例形式分析了spring获取Bean本身id的相关配置与实现技巧,需要的朋友可以参考下
    2019-11-11
  • Java中定时任务的全方位场景实现思路分析

    Java中定时任务的全方位场景实现思路分析

    在开发过程中,根据需求和业务的不同经常会有很多场景需要用到不同特性的定时任务,本文将针对这些场景,提供不同的一个实现思路,感兴趣的小伙伴快跟随小编一起学习一下吧
    2023-12-12
  • 动力节点_王勇_DRP项目视频教程完整版292集

    动力节点_王勇_DRP项目视频教程完整版292集

    该视频由国内知名讲师王勇老师主讲,适合掌握Java基础内容的同学学习,本视频共计292集,学习Java Web项目,DRP项目视频是首选,累计下载量已经达到上千万,很多同学通过自学该视频找到了软件开发工作
    2017-04-04
  • Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Kotlin常用函数let,with,run,apply用法与区别案例详解

    Kotlin常用函数let,with,run,apply用法与区别案例详解

    这篇文章主要介绍了Kotlin常用函数let,with,run,apply用法与区别案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • 带你3分钟带你搞定Spring Boot中Schedule

    带你3分钟带你搞定Spring Boot中Schedule

    本文主要围绕Spring scheduled应用实践进行分享,如果是单体应用,使用SpringBoot内置的@scheduled注解可以解决大部分业务需求,对Spring Boot中Schedule 相关知识感兴趣的朋友一起看看吧
    2024-07-07
  • feign调用返回object类型转换方式

    feign调用返回object类型转换方式

    这篇文章主要介绍了feign调用返回object类型转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论