一。问题描述

1.最近在做分布式项目,需要用到其他子模块接口方法返回数据,同时这个项目也是前后端分离项目,后台接口返回的格式都是封装好了的json格式,我想拿到其中的data数据,如下图所示:在这里插入图片描述

2.我调用接口返回数据的getData()得到其中的data数据,再用list去接收它:

    @ApiOperation(value = "得到该用户的所有选修课程")
    @GetMapping("/getUserCourseList")
    @PreAuthorize("hasAnyAuthority('teacher_base','admin_base','student_base')")
    public List<CourseInfo> getUserCourseList(){
        //接收其他模块接口方法返回值
        HttpRespond httpRespond=courseClient.getUserCourseList();
        //用list接收得到其中的data数据
        List<CourseInfo> courseInfoList= (List<CourseInfo>) (httpRespond.getData());
        return courseInfoList;
    }

3.再用postman去测试接口,能得到相应的数据:
在这里插入图片描述
4.但是如果我遍历该集合,则会出现以下错误:

在这里插入图片描述
在这里插入图片描述

二。解决方法

1.解决思路:从list中取出来的数据需要进行转化成json格式字符串,然后再将该json格式字符串转换成对象,这样就不会再出现报错情况,能成功遍历该list列表。

2.解决方式一:使用json-lib对其进行转换

pom.xml文件导入依赖:

        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.3</version>
            <classifier>jdk15</classifier>
        </dependency>

后台循环list代码:

//遍历list
for(Object object:courseInfoList){
    // 将list中的数据转成json字符串
    JSONObject jsonObject=JSONObject.fromObject(object);
    //将json转成需要的对象
    CourseInfo courseInfo = (CourseInfo)JSONObject.toBean(jsonObject, CourseInfo.class);
    System.out.println(courseInfo);
    }

3.解决方式二:使用fast-json对其进行转换

pom.xml文件导入依赖:

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.61</version>
        </dependency>

后台循环list代码:

//遍历list
for(Object object:courseInfoList){
    // 将list中的数据转成json字符串
    String jsonObject=JSON.toJSONString(object);
    //将json转成需要的对象
    CourseInfo courseInfo= JSONObject.parseObject(jsonObject,CourseInfo.class);
    System.out.println(courseInfo);
    }

4.都能够对list进行遍历:
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐