Resttemplate 没有正确反序列化 JSON
Posted
技术标签:
【中文标题】Resttemplate 没有正确反序列化 JSON【英文标题】:Resttemplate does not deserialize JSON correctly 【发布时间】:2019-04-06 22:46:45 【问题描述】:我的服务器输出以下 JSON 对象:(ContentType = application/json)
"Name":["Name1","Name2"]
这是我尝试将其读入 POJO 的 Java 代码。
它创建了一个 Names 类的实例,但里面的数组为空。
我在这里错过了什么?
restTemplate = new RestTemplate();
uri = "http://localhost:80/api/names";
Names namesWrapperInstance = restTemplate.getForObject(uri, Names.class);
if(namesWrapperInstance != null && namesWrapperInstance.getNames() != null)
for(String name : namesWrapperInstance.getNames())
System.out.print(name);
@JsonRootName(value = "Name")
class Names
private String[] Names;
public Names()
public String[] getNames()
return Names;
public void setNames(String[] Names)
this.Names = Names;
【问题讨论】:
【参考方案1】:删除 JsonRootName 注释,遵守 Java 代码中的 Java 命名约定,并使用 @JsonProperty("Name")
注释 names
字段。
我也强烈建议使用集合而不是数组。
如果可以,您也应该真正重构 JSON。字段使用小写,就像在 Java 中一样,并将其重命名为 names
,因为它是一个数组,包含多个名称,而不仅仅是一个。如果你这样做,JsonProperty
注释甚至就不再需要了。
【讨论】:
非常感谢,成功了。不幸的是,我不必选择更改服务器端代码以上是关于Resttemplate 没有正确反序列化 JSON的主要内容,如果未能解决你的问题,请参考以下文章
Spring RestTemplate在尝试反序列化嵌套的对象列表时返回null对象
Spring Boot:没有从字符串值反序列化的字符串参数构造函数/工厂方法