相关疑难解决方法(0)

使用Spring RestTemplate获取JSON对象的列表

我有两个问题:

  • 如何使用Spring RestTemplate映射JSON对象列表.
  • 如何映射嵌套的JSON对象.

我正在尝试使用https://bitpay.com/api/rates,遵循http://spring.io/guides/gs/consuming-rest/中的教程.

java spring resttemplate

186
推荐指数
8
解决办法
31万
查看次数

Spring RESTTemplate的泛型

我有一个这样的课:

public class Wrapper<T> {

 private String message;
 private T data;

 public String getMessage() {
    return message;
 }

 public void setMessage(String message) {
    this.message = message;
 }

 public T getData() {
    return data;
 }

 public void setData(T data) {
    this.data = data;
 }

}
Run Code Online (Sandbox Code Playgroud)

我使用resttemplate如下:

...
Wrapper<Model> response = restTemplate.getForObject(URL, Wrapper.class, myMap);
Model model = response.getData();
...
Run Code Online (Sandbox Code Playgroud)

然而它抛出一个:

ClassCastException
Run Code Online (Sandbox Code Playgroud)

我读到了:尝试在java中使用Jackson但没有帮助的问题.有一些与我的问题相关的主题等:https://jira.springsource.org/browse/SPR-7002https://jira.springsource.org/browse/SPR-7023

有任何想法吗?

PS:我的错误是:

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to a.b.c.d.Model
Run Code Online (Sandbox Code Playgroud)

我认为resttemplate不能理解我的泛型变量,也许它接受它作为Object而不是泛型T.所以它变成了LinkedHashMap.你可以在这里阅读它说当从它的组合解释时: …

java generics spring jackson resttemplate

59
推荐指数
2
解决办法
5万
查看次数

ClassCastException:RestTemplate返回List <LinkedHashMap>而不是List <MymodelClass>

我正在尝试访问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响应的建议,那将会有很大帮助.谢谢

java spring android classcastexception resttemplate

29
推荐指数
1
解决办法
3万
查看次数

Kotlin用Class <T>参数调用java方法

我想RestTemplate在Kotlin中使用Spring ,如下所示:

//import org.springframework.web.client.RestTemplate
fun findAllUsers(): List<User> {
        val restTemplate = RestTemplate()

        //has error
        val ret = List<User>.javaClass
        return restTemplate.getForObject(URI(hostAddress), ret)
}
Run Code Online (Sandbox Code Playgroud)

RestTemplate.getForObject(URI url, Class<T> responseType)有这个签名,我从得到这个错误"未解决的参考序列" Listval ret = List<User>.javaClass.

如果我这样使用,val ret = List<User>::class.java我会收到此错误"只允许类在类文字的左侧"

有什么问题?这样做的正确方法是什么?这是一个错误吗?

java kotlin

17
推荐指数
3
解决办法
1万
查看次数