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的主要内容,如果未能解决你的问题,请参考以下文章

如何正确反序列化由包含另一个对象的列表项组成的 json?

Spring的RestTemplate

Spring RestTemplate在尝试反序列化嵌套的对象列表时返回null对象

Spring Boot:没有从字符串值反序列化的字符串参数构造函数/工厂方法

如何反序列化java Long哪个xml标签有xsi:nil?

java 调用第三方http接口的方式RestTemplate