当前位置: 首页 > 知识库问答 >
问题:

返回列表而不是列表

胡璞瑜
2023-03-14

我试图访问MyModelClass上的getter方法,但我的代码返回列表

List<MyModelClass> myModelClass=(List<MyModelClass>) restTemplate.postForObject(url,mvm,List.class);

System.out.println("Response= " +  myModelClass);

我试图打印响应,我得到了我所期望的JSON响应。但是当我试图运行这段代码时。

System.out.println("Response= " +  myModelClass.get(0).getMessage());

它将产生此错误。

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.XXX.XXX.MyModelClass 

这是一种不匹配。有人能帮我摆脱这个错误吗?谢谢

MyModelClass

public class MyModelClass{

    /**
     * 
     */
    @JsonProperty("id")
    public String id;

    @JsonProperty("type")
    public String type;

    @JsonProperty("user")
    public String user;

    @JsonProperty("message")
    public String message;

    //getters

错误为

MyModelClass[] myModelClass= restTemplate.postForObject(url,mvm, myModelClass[].class);

组织。springframework。http。转换器。HttpMessageTreadableException:无法读取JSON:无法反序列化java实例。util。ArrayList超出起始\u对象标记

JSON响应结构

    [{"key1":"value1","key2":"value2","parameters":{"key1":"value1","key2":"value2","key3":"value3","key4":"value4","key5":"value5"}},
{"key12":"value12","key22":"value22","parameters":{"key12":"value12","key22":"value22","key32":"value32","key42":"value42","key52":"value52"}}]

如果有任何建议,关于如何映射这种JSON响应在RestTem板,这将帮助很大。谢谢


共有1个答案

叶冥夜
2023-03-14

使用以下方法调用

List<MyModelClass> myModelClass=(List<MyModelClass>) restTemplate.postForObject(url,mvm,List.class);

Jackson只知道您需要一个列表,但对类型没有任何限制。默认情况下,Jackson将JSON对象反序列化为LinkedHashMap,这就是为什么您会得到ClassCastException

如果返回的JSON是一个数组,获取它的一种方法是使用数组

MyModelClass[] myModelClasses = restTemplate.postForObject(url,mvm, MyModelClass[].class);

您始终可以将该数组中的元素添加到列表中。

我不记得从哪个版本开始,但是restemplate#exchange现在有一个重载,它接受参数化typereference参数。ParameterizedTypeReference是一种类型标记黑客,用于建议将参数化类型作为反序列化的目标。

您可以重构上面的代码,使用Exchange而不是postForObject,并使用ParameterizedTypeInformation来获取List

ParameterizedTypeReference<List<MyModelClass>> typeRef = new ParameterizedTypeReference<List<MyModelClass>>() {
};
ResponseEntity<List<MyModelClass>> responseEntity = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(mvm), typeRef);
List<MyModelClass> myModelClasses = responseEntity.getBody();

 类似资料:
  • 在Java 8中,我越来越多地用替换返回值。 所以我曾经有: 我现在使用: 我对此的论点是: 它强制执行基础列表的不变性。 它隐藏了存在基础列表的事实。之后可以将其更改为集合或其他结构,而无需更改方法签名 它很好地封装了该方法的用户希望对项进行处理,而不是对列表进行处理 如果需要,它可以在以后进行简单的并行化 事实上,现在,在我的代码中,返回<code>列表 显然,其中一些可以通过不可变集合来实现

  • 我已经能够验证是否会产生排序的。但是,它不会返回列表。为什么?

  • 我正在学习如何使用Spring靴和胸腺嘧啶。我有一个问题,我在表单列表中提供一个特定对象的列表到一个Thymeleaf页面。当用户选择值并发布结果时,结果是所选对象的字符串,并且与我想要存储值的对象不兼容。 这可能听起来像一口,所以下面是代码。 输入:一个类将一组成分传递给表单,这个类在一个类成分列表中传递给表单(过滤对此无关紧要--插入一个列表作为model属性的值,键是一种成分类型) Thym

  • 问题内容: 返回对象的名称为。因此,当我致电时,此代码将失败。我有什么办法可以解决临时问题吗?还是我应该怎么做? ps这是我在python中的第一个代码。我认为这是功能。 问题答案: 您可以使用返回的反向迭代器。调用时,它会在列表中进行原位反转,并返回None。 编辑: 我知道您现在正在尝试执行的操作,在我看来,仅凭列表理解就可以轻松完成此操作: 这基本上是在第一个元素之后查看所有元素,并收集所有

  • 我使用Java 8 streams尝试了以下代码: 我得到的是一个< code >列表 我正确地得到了一个

  • 问题内容: 如果没有行,都与正在返回 空 一个,而不是列表值。 这背后的原因是什么? 问题答案: 原因是不与有效Java 2nd Edition,项目43 一致,在客户端代码中强制执行空检查: 返回空数组或集合,而不是null 。 这使客户端代码更简单,更不易出错(并且很可能也是该方法的实现)。 空返回惯用语可能是C编程语言的一种保留,在C语言中,数组长度与实际数组分开返回。在C中,如果返回零作为