使用Spring RestTemplate将嵌套的JSON对象映射到Java类

2022-09-04 22:07:13

我知道这可能很简单。但是,我只是无法让它工作。

所以我正在尝试使用Spring RestTemplate来映射我的JSON数据。我有来自 rest 调用的以下 JSON 响应。

{
  "message":"ok",
  "status":"ok",
  "data":[
      {"Name":"Yo",
       "Address":"100 Test Rd"},
      {...},
      {...}
   ]
}

这是我尝试将其映射到的类。

@JsonIgnoreProperties(ignoreUnknown = true)
public class Response implements Serializable {

  private String message;
  private String status;
  private List<Data> data;

  // I could also use a array instead
  // private Data[] data;
}

这是我的数据类:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Data implements Serializable {

  private String Name;
  private String Address;
}

以下是我用来调用 RestTemplate 的代码:

public Reponse getResponse() {
    ResponseEntity<Reponse> responseEntity = restTemplate.getForEntity(Url, Reponse.class);

    return responseEntity.getBody();
}

现在问题来了。我能够获得“消息”和“状态”,但是当我尝试记录/打印数据时,它显示空。不完全确定这里发生了什么。我真的可以使用一些帮助。谢谢。


答案 1

我遇到了类似的问题,RestTemplate没有将嵌套的JSON对象映射到我的类模型,在经历了很多挫折之后,我决定使用RestTemplate将我的JSON检索为字符串(而不是直接转换为我的目标对象),然后使用google Gson库将我的String转换为我的目标实体。

啪.xml

<dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.2.4</version>
    </dependency>

调用 RestTemplate 的代码:

 ResponseEntity<String> responseEntity = restTemplate.getForEntity(Url,String.class);
Gson gson = new GsonBuilder().create();
Response reponse = gson.fromJson(responseEntity , Response.class);

不幸的是,我无法找出为什么我的嵌套对象没有首先使用RestTemplate进行映射,但我希望这个解决方法有所帮助!


答案 2

使用 Rest 模板从 REST API 读取 Json 数据时,我遇到了类似的问题。要解决列表的声明 getter 和 setters,请执行以下操作:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Response implements Serializable {

  private String message;
  private String status;
  private List<Data> data;

 // getters and Setters for the list. 


}

RestTemplate 将在内部将值从 listarray 映射到相应的数组。