使用 GSON 时,我是否必须在 REST-WS 消费者和提供者端保留相同的 POJO 以进行序列化和反序列化?



我是GSON,JSON的新手,因此问了这个问题:

在安卓端,我必须向服务器上的 REST WS 发送预订信息。所以这里有一个问题:

我有一个BookingDTO,我使用GSON对其进行序列化。我把它发送到服务器上的 REST WS。现在,我是否还需要在服务器端使用相同的BookingDTO进行GSON反序列化?(但这意味着紧密耦合,对吧?我必须使用 GSON 还是可以使用普通 JSON?

我应该采取什么方法?

您可以使用JSON并将该内容解析到您的对象中,或者直接处理方法(服务器端)中的JsonObjectJsonArray

如果你想使用像BookingDTO这样的对象,你可以在Android项目上重新创建类,或者从服务器端重用这些类(反之亦然)。

通过创建仅包含所有 POJO 类所在的类(例如,仅导出模型包)的JAR文件。

使用 JAR 文件可以保持服务器和客户端代码之间的一致性,当您添加/删除字段时,您不必更改 2 个类,只需在一个地方更改并重新导出 JAR。

现在到紧密耦合问题,我认为这里没有。 因为您正在使用类列表(并且您需要它们在 2 个或更多单独的位置/项目中......),所以这不是耦合,这是重用相同的代码,这应该是一种很好的做法。

例如,当Class AClass B的成员时,耦合是,但当您在 2 个不同的系统/组件中使用Class AClass B时,就不是这样了......

我还需要在服务器端使用相同的BookingDTO用于GSON吗? 反序列化它?

简而言之,是的,您必须准备一个POJO才能接收请求。因此,为此,JSON 反序列化程序将尝试解析 JSON 请求的属性并将其映射到服务器的 POJO。

对于Spring,我们做了如下的事情。这是一个创建 POST 请求类型的控制器,期望拥有BookingDTO类型的参数。我们使用杰克逊库进行 JSON 序列化和反序列化。

@RequestMapping(value = {"/update"}, method = RequestMethod.POST)
@ResponseBody
public void update(@RequestBody BookingDTO bookingDTO) throws FamsException {
// Do what you intend to do with this bookingDTO object sent from client side(Android)
}

就目前而言,如果您的 JSON 属性名称与属性名称和BookingDTO类型匹配,那么它可以映射这些名称,您将获得BookingDTO bookingDTO具有所有匹配属性的对象。

请确保不要使用不在BookingDTOPOJO 中的属性发送 JSON 请求。否则,服务器将抛出 400 错误请求错误。

请注意,您也可以将Map作为参数发送。这不需要在服务器端匹配 POJO。您可以通过按照自己喜欢的方式将数据从 Map 中取出来构造不同的对象。

希望你明白这个想法。

相关内容

  • 没有找到相关文章

最新更新