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

Java Spring Android客户端:获取返回更复杂JSON对象的请求,java,android,json,spring,spring-boot,Java,Android,Json,Spring,Spring Boot,我正试图在一个移动应用程序项目中将springforandroid作为Spring服务器的客户端。看了文档()之后,我想使用 方法getForObject()直接创建我将在代码中使用的对象。我在internet上找到的所有示例都只显示了如何处理每个键(String、long、int)的值的更原始的类型。从服务器返回的JSON对象如下所示: { "id": "MSP-SS-043208", "nom": "Inondation-Débit-Niveau", "source": "Min

我正试图在一个移动应用程序项目中将springforandroid作为Spring服务器的客户端。看了文档()之后,我想使用 方法
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"
}
我的问题是,我不知道如何处理几何体关键点,因为它不是一个基本对象!如何让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属性以确保正确创建对象?

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

这种反序列化通常由Spring“自动”执行(特别是由jackson提供的fasterxml库)。由于Geometry类看起来有一些非平凡的对象,因此还需要定义一个
坐标
类和可以类似地反序列化的“Type”类(或Enum)

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

@JsonCreator
public Alert(Map<String, Object> params) {...}
@JsonCreator
公共警报(映射参数){…}

然后您可以手动解析警报json。

非常感谢!“type”的类型将始终是字符串,因此这不是问题。Spring还会自动将坐标属性转换为Java数组吗?(我想我们可以在应用程序中只使用双数组)。@OlivierL.Applin我相信Spring会将JSONArray转换为列表,我不太确定数组(数组不是合适的对象,所以我不确定)。我所指的
类型
几何体
的内部,但我想使用字符串也不错。太好了!不幸的是,我现在似乎无法向我们的服务器发送请求,所以我无法测试。。。但如果有效的话,我会通知你:)!感谢againI现在可以正确地向我们的服务器发出一些请求,除了我臭名昭著的几何图形之外,一切都很好。你所说的“反序列化逻辑”到底是什么意思?Spring客户端对我们来说都是全新的me@OlivierL.Applin反序列化逻辑指的是将原始JSON转换为Java对象的逻辑。这种逻辑并不总是很复杂,但有时Java对象与JSON有很大不同,即使您可以在两者之间进行转换。