如何将LinkedHashMap转换为Custom java对象?

 深tp悟人生 发布于 2023-01-18 14:40

我试图通过RESTful WS将数据从一个应用程序传送到另一个应用程序并且它可以工作,但我不能使用这些数据,因为我无法投射它... WS返回一个像这样的对象列表:

{id=1, forename=John, surname=Bloggs, username=jbloggs, role=Graduate Developer, office=London, skills=[{technology=Java, experience=2.5}, {technology=Web, experience=2.0}, {technology=iOS, experience=0.0}, {technology=.NET, experience=0.0}]}

让我使用Jackson的ObjectMapper:

ObjectMapper mapper = new ObjectMapper();

    List list = new ArrayList();


    try {

        list = mapper.readValue(con.getInputStream(), ArrayList.class);

    } catch (JsonGenerationException e) {

        e.printStackTrace();

    } catch (JsonMappingException e) {

        e.printStackTrace();

    } catch (IOException e) {

        e.printStackTrace();

    }

之后我有3行代码:

System.out.println(list.get(0));
System.out.println(list.get(0).getForename());
return list;

返回,因为此方法的返回值被传递给在浏览器中显示正确数据的其他Web服务.有趣的事情发生在两条打印行中,一条打印来自此帖子顶部的数据({id:1 ...}),另一条打印异常:

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.xxx.xxx.web.dto.rp.ConsultantDto

ConsultantDto和SkillDto是两个合法的类,它们的所有属性都设置为匹配来自WS的数据,所有的getter/setter都已到位.就我而言,LinkedHashMap将东西存储为键:值对,所以我只是看不到这个异常的来源.我如何解决它,为什么ObjectMapper只是正确解析值(当我得到一个ConsultantDto而不是List时它会这样做)?

1 个回答
  • 你需要这样做:

    List<ConsultantDto> myObjects =
        mapper.readValue(jsonInput, new TypeReference<List<ConsultantDto>>(){});
    

    (从这个SO回答)

    你必须使用的原因TypeReference是因为Java的一个不幸的怪癖.如果Java有一个合适的泛型,我敢打赌你的语法会有效.

    2023-01-18 14:42 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有