我试图访问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板,这将帮助很大。谢谢
使用以下方法调用
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中,如果返回零作为