【问题标题】:Reading JSON map structure via spring boot通过 Spring Boot 读取 JSON 映射结构
【发布时间】:2017-02-28 20:37:16
【问题描述】:

如果我的 REST 服务返回以下 JSON 结构:

{
   "foo" : {
      "id" : "baz"
   }
   "qux" : {
      "id" : "toto"
   }
}

对我来说,它看起来像一个地图结构。我不确定如何使用弹簧靴(通过杰克逊)阅读此内容。

我已经像这样定义了我的 JSON 绑定类:

public class Foos {

   private Map<String, Foo> fooInstances;

   private void setFooInstances(Map<String, Foo> fooInstances) {
      this.fooInstances = fooInstances;
   }

   private Map<String, Foo> getFooInstances() {
      return fooInstances;
   }

}

Foo 实例如下所示:

public class Foo {

   private String id;


   private void setId(String id) {
      this.id = id;
   }

   private String getId() {
      return id;
   }

}

发出请求的spring代码是这样的:

RestTemplate template = new RestTemplate();
ResponseEntity<Foos> responseEntity = (ResponseEntity<Foos>) template.getForEntity(serviceEndpointURL, Foos.class);

我最初有一个 START_OBJECT 错误,我通过使用相应的地图创建 Foos 类来修复它,现在我没有收到错误。相反,我得到一个填充的 ResponseEntity,带有一个 'Foos' 实例,但地图为空。知道我做错了什么吗?

【问题讨论】:

  • 您使用什么进行 JSON 映射?杰克逊还是格森?我在代码中没有看到它。
  • 道歉。这是通过杰克逊。 Spring boot 使用 Jackson JSON 库。
  • 感谢您的编辑。我在您的类文件中没有看到任何注释
  • 也许您应该将地图初始化为 Map 实现的空实例,例如 new HashMap();
  • 我对杰克逊很陌生。我应该使用哪些注释?我之前有一个没有绑定的示例(根据本教程:spring.io/guides/gs/consuming-rest

标签: java json spring jackson resttemplate


【解决方案1】:

像这样修改你的 Foos 类

public class Foos {

@JsonIgnore
private Map<String, Object> properties = new HashMap<String, Object>();

@JsonAnyGetter
public Map<String, Object> getProperties() {
return this.properties;
}

@JsonAnySetter
public void setProperty(String name, Object value) {
this.properties.put(name, value);
}
}

您可以从地图中将Object 类型转换为Foo

如果您有任何问题,请告诉我!

【讨论】:

  • 谢谢,我会试一试,让你知道。
  • 乐于助人!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多