【问题标题】:Resttemplate does not deserialize JSON correctlyResttemplate 没有正确反序列化 JSON
【发布时间】: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;
  }
}

【问题讨论】:

    标签: java json spring-mvc spring-boot resttemplate


    【解决方案1】:

    删除 JsonRootName 注释,遵守 Java 代码中的 Java 命名约定,并使用 @JsonProperty("Name") 注释 names 字段。

    我也强烈建议使用集合而不是数组。

    如果可以,您也应该真正重构 JSON。字段使用小写,就像在 Java 中一样,并将其重命名为 names,因为它是一个数组,包含多个名称,而不仅仅是一个。如果你这样做,JsonProperty 注释甚至就不再需要了。

    【讨论】:

    • 非常感谢,成功了。不幸的是,我不必选择更改服务器端代码
    猜你喜欢
    • 2019-08-21
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 2019-05-02
    • 2012-06-15
    相关资源
    最近更新 更多