java - Spring 安卓客户端 : get request returning more complexe JSON objects

标签 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() 方法直接创建我将在代码中使用的对象。我在 Internet 上找到的所有示例仅显示了如何处理每个键值(String、long、int)的更原始类型。从服务器发回的 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 对象作为某个键的属性?那么 double 组(坐标)呢?

这是我正在尝试使用的类:

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 ...

}

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

最佳答案

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

这种反序列化通常由 Spring(具体来说,由 jackson 提供的 fasterxml 库)“自动”执行。由于 Geometry 类看起来有一些重要的对象,您还需要定义一个 Coordinates 类和可以类似地反序列化的“Type”类(或 Enum)。

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

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

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

关于java - Spring 安卓客户端 : get request returning more complexe JSON objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51217423/

相关文章:

java - 在数组中查找单个整数

java - 使用Stack和List ADT实现Push方法

java - 如何在没有entryId的情况下更新SQLiteOpenHelper中的条目?

android - 全宽按钮 Material 对话框

android - 无法从内部类 : Kotlin android 访问变量

java - 如何打印我的 Java 对象而不得到 "SomeType@2f92e0f4"?

java - 使用 Morphia 在 MongoDB 中存储对象时是否可以更改字段的类型?

c# - 远程服务器返回错误 : (400) Bad Request?

json - Golang : Protobuff generated Struct is not decoding child attribute for json. 解码

ios - iOS 版 SwiftyJson 中具有可变日期的 JSON