使用SpringRESTTemplate将嵌套的JSON对象映射到Java类
我知道这可能很简单。然而,我就是不能让它工作 所以我尝试使用SpringRestTemplate来映射我的JSON数据。我有一个rest调用的JSON响应使用SpringRESTTemplate将嵌套的JSON对象映射到Java类,java,json,spring,resttemplate,Java,Json,Spring,Resttemplate,我知道这可能很简单。然而,我就是不能让它工作 所以我尝试使用SpringRestTemplate来映射我的JSON数据。我有一个rest调用的JSON响应 { "message":"ok", "status":"ok", "data":[ {"Name":"Yo", "Address":"100 Test Rd"}, {...}, {...} ] } 这是我试图将其映射到的类 @JsonIgnoreProperties(ign
{
"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;
}
以下是我用来调用RestTemplate的代码:
public Reponse getResponse() {
ResponseEntity<Reponse> responseEntity = restTemplate.getForEntity(Url, Reponse.class);
return responseEntity.getBody();
}
ResponseEntity<String> responseEntity = restTemplate.getForEntity(Url,String.class);
Gson gson = new GsonBuilder().create();
Response reponse = gson.fromJson(responseEntity , Response.class);
public response getResponse(){
ResponseEntity ResponseEntity=restTemplate.getForEntity(Url,response.class);
返回responseEntity.getBody();
}
现在问题来了。我能够获取“消息”和“状态”,但当我尝试记录/打印数据时,它显示为空。不太清楚这里发生了什么。我真的需要一些帮助。谢谢。请使用
private List data=new AllarList()
;
请在这两个类中提供getter()和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>
com.fasterxml.jackson.core
杰克逊注释
2.2.3
com.fasterxml.jackson.core
杰克逊数据绑定
2.2.3
com.fasterxml.jackson.datatype
jackson数据类型joda
2.1.1
org.codehaus.jackson
杰克逊地图绘制者
1.8.8
如果您只需要打印数据,您可以这样做
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.getForEntity(
"your url",
String.class);
System.out.println(response);
RestTemplate RestTemplate=new RestTemplate();
ResponseEntity response=restemplate.getForEntity(
“您的url”,
字符串(类);
System.out.println(响应);
我也遇到了类似的问题,RestTemplate没有将嵌套的JSON对象映射到我的类模型,在经历了很多挫折之后,我决定使用RestTemplate将JSON作为字符串检索(而不是直接转换为目标对象),然后使用google Gson库将字符串转换为目标实体
pom.xml
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>
com.google.code.gson
格森
2.2.4
调用RestTemplate的代码:
public Reponse getResponse() {
ResponseEntity<Reponse> responseEntity = restTemplate.getForEntity(Url, Reponse.class);
return responseEntity.getBody();
}
ResponseEntity<String> responseEntity = restTemplate.getForEntity(Url,String.class);
Gson gson = new GsonBuilder().create();
Response reponse = gson.fromJson(responseEntity , Response.class);
ResponseEntity ResponseEntity=restemplate.getForEntity(Url,String.class);
Gson Gson=new GsonBuilder().create();
Response-Response=gson.fromJson(responseEntity,Response.class);
不幸的是,我无法找到为什么我的嵌套对象没有首先使用RestTemplate进行映射,但我希望这个解决方法能有所帮助 在使用REST模板从REST API读取Json数据时,我遇到了类似的问题。要解析列表的声明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.
}
@JsonIgnoreProperties(ignoreUnknown=true)
公共类响应实现可序列化{
私有字符串消息;
私有字符串状态;
私人名单数据;
//列表的getter和setter。
}
RestTemplate将在内部将值从listarray映射到相应的数组。用@jsonUnrapped注释属性“data”,如下所示
@JsonIgnoreProperties(ignoreUnknown = true)
public class Response implements Serializable {
private String message;
private String status;
@JsonUnwrapped
private List<Data> data;
}
@JsonIgnoreProperties(ignoreUnknown=true)
公共类响应实现可序列化{
私有字符串消息;
私有字符串状态;
@JsonUnwrapped
私人名单数据;
}
我遇到了同样的问题。用@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
}
现在应该填充
数据
类的字段,您可以独立于JSON表示来命名字段(例如名称
,而不是名称
)。我知道这是一个旧线程
但是,对于有相同问题的任何人,您都可以在Jackson中使用MappingJackson2HttpMessageConverter
请参考线程中给出的答案。我没有在这里设置setter和getter以避免混乱。试图初始化“数据”。仍然返回null。“Include.NON_EMPTY”“Include无法解析为变量”上的编译错误?谢谢。请导入:导入com.fasterxml.jackson.annotation.JsonInclude;我也有同样的问题你找到解决办法了吗?你找到解决办法了吗?谢谢。我删除了嵌套类并创建了另一个类