Spring Android客户端:获取请求,返回更复杂的JSON对象

时间:2018-07-06 20:48:34

标签: java android json spring spring-boot

我正在尝试将Spring for Android作为移动应用程序项目中Spring服务器的客户端。查看文档(https://docs.spring.io/spring-android/docs/1.0.1.RELEASE/reference/html/rest-template.html)之后,我想使用 方法getForObject()直接创建我将在代码中使用的对象。我在互联网上找到的所有示例仅显示了如何对每个键(字符串,长整数,整数)的值使用更原始的类型。从服务器发送回的JSON对象如下所示:

{
  "id": "MSP-SS-043208",
  "nom": "Inondation-Débit-Niveau",
  "source": "Ministère de la Sécurité publique du Québec",
  "territoire": "Rivière des Mille Îles(043208)",
  "certitude": "Observé",
  "severite": "Mineure",
  "dateDeMiseAJour": "lundi 04 juin 2018",
  "urgence": "Future",
  "description": "Seuil de surveillance atteint",
  "count": 1,
  "geometry": {
      "type": "Point",
      "coordinates": [-73.6387202781213, 45.6928705203507]
  },
  "type": "Suivi des cours d'eau"
}

我的问题是我不知道如何使用 geometry 键,因为它不是原始对象!如何使Spring识别存在JSON对象作为特定键的属性?那么双精度( coordinates )的数组呢?

这是我要使用的课程:

public class Alert {

  private String id;
  private String nom;
  private String source;
  private String territoire;
  private String certitude;
  private String severite;
  private String dateDeMiseAJour;
  private String urgence;
  private String description;
  private int count;
  private ????? geometry;
  private String type;

  ... gettters and setters ...

}

我的问题归结为:如何确定几何属性以确保正确创建对象?

1 个答案:

答案 0 :(得分:1)

您需要创建一个具有反序列化逻辑的Geometry类,然后将private Geometry geometry声明为Alert类的成员。

这种反序列化通常由Spring(特别是由jackson提供的fastxml库)“自动”执行。由于Geometry类看起来好像有一些简单的对象,因此您还需要定义一个Coordinates类和一个'Type'类(或Enum),它们可以反序列化。

有时,这种方法可以创建许多小类,这些小类需要大量工作来处理。另一种方法是在@JsonCreator类的构造函数上使用Alert批注:

@JsonCreator
public Alert(Map<String, Object> params) {...}

然后您可以手动解析Alert json。