我知道这可能很简单。但是,我无法让它发挥作用。
所以我尝试使用Spring RestTemplate来映射我的JSON数据。我从休息电话中听到了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();
}
现在问题来了。我能够获得“消息”和“状态”,但是当我尝试记录/打印数据时,它显示为null。不完全确定这里发生了什么。我真的可以用一些帮助。感谢。
答案 0 :(得分:4)
我遇到类似的问题,RestTemplate也没有将嵌套的JSON对象映射到我的类模型,经过很多挫折我决定使用RestTemplate将我的JSON检索为String(而不是直接转换为我的目标对象),然后使用google Gson库将我的String转换为我的目标实体。
的pom.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进行映射,但我希望这种解决方法有所帮助!
答案 1 :(得分:1)
使用Rest Template从REST API读取Json数据时遇到了类似的问题。解决List的声明getter和setter:
@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中的值映射到相应的数组。
答案 2 :(得分:1)
我遇到了同样的问题。用@JsonProperty
注释:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Data implements Serializable {
@JsonProperty("Name")
private String name;
@JsonProperty("Address")
private String address;
// getters / setters for name and address
}
现在应填充Data
类的字段,您可以将字段命名为独立于JSON表示的字段(例如name
而不是Name
)。
答案 3 :(得分:0)
请使用private List<Data> data = new AllarList<Data>( )
;
并且请在两个类中提供getters()和setters()方法。
将@JsonInclude(Include.NON_EMPTY)
放在数据类
请在主POM.xml文件的部分下添加以下依赖项并进行maven编译。然后我猜你的问题会得到解决。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.8.8</version>
</dependency>
答案 4 :(得分:0)
注释属性&#34;数据&#34; @JsonUnwrapped如下
@JsonIgnoreProperties(ignoreUnknown = true)
public class Response implements Serializable {
private String message;
private String status;
@JsonUnwrapped
private List<Data> data;
}
答案 5 :(得分:0)
答案 6 :(得分:-1)
如果您只需要打印数据,则可以执行此操作
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.getForEntity(
"your url",
String.class);
System.out.println(response);