Eri*_*ick 29 java spring android classcastexception resttemplate
我正在尝试访问MyModelClass上的getter方法,但我的代码返回List<LinkedHashMap>
而不是List<MyModelClass>
.这是我的代码.
List<MyModelClass> myModelClass=(List<MyModelClass>) restTemplate.postForObject(url,mvm,List.class);
System.out.println("Response= " + myModelClass);
Run Code Online (Sandbox Code Playgroud)
我试图打印响应,我得到了我期待的JSON响应.但是当我试图运行这段代码时.
System.out.println("Response= " + myModelClass.get(0).getMessage());
Run Code Online (Sandbox Code Playgroud)
它会产生这个错误.
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.XXX.XXX.MyModelClass
Run Code Online (Sandbox Code Playgroud)
这是不匹配的.有人可以帮我摆脱这个错误吗?谢谢.
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
Run Code Online (Sandbox Code Playgroud)
错误
MyModelClass[] myModelClass= restTemplate.postForObject(url,mvm, myModelClass[].class);
Run Code Online (Sandbox Code Playgroud)
org.springframework.http.converter.HttpMessageNotReadableException:无法读取JSON:无法从START_OBJECT令牌中反序列化java.util.ArrayList的实例
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"}}]
Run Code Online (Sandbox Code Playgroud)
如果有任何关于如何在RestTemplate中映射这种JSON响应的建议,那将会有很大帮助.谢谢
Sot*_*lis 45
用以下方法调用
List<MyModelClass> myModelClass=(List<MyModelClass>) restTemplate.postForObject(url,mvm,List.class);
Run Code Online (Sandbox Code Playgroud)
所有杰克逊都知道你想要一个List
,但对类型没有任何限制.默认情况下,杰克逊将一个JSON对象反序列化为一个LinkedHashMap
,所以这就是你得到它的原因ClassCastException
.
如果返回的JSON是一个数组,获得它的一种方法是使用数组
MyModelClass[] myModelClasses = restTemplate.postForObject(url,mvm, MyModelClass[].class);
Run Code Online (Sandbox Code Playgroud)
您始终可以将该数组中的元素添加到List
.
我不记得是什么版本,但RestTemplate#exchange
现在有一个接受ParameterizedTypeReference
参数的重载.的ParameterizedTypeReference
是用于建议一个参数化的类型为目标解串类型令牌黑客攻击.
您可以重构上面的代码来exchange
代替postForObject
,并ParameterizedTypeReference
用来获取List<MyModelClass>
.例如
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();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
30162 次 |
最近记录: |