使用GSON时,我是否必须在REST-WS使用者和用户处保留相同的POJO。供应商端序列化&反序列化?

时间:2017-03-29 09:28:58

标签: android json web-services gson

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

在android端,我必须将预订信息发送到服务器上的REST WS。所以这是一个问题:

我有一个BookingDTO&我用GSON来序列化它。我在服务器上发送REST WS。现在我还需要在服务器端使用相同的BookingDTO进行GSON反序列化吗? (但那意味着紧耦合吗?)我是否必须使用GSON或者我可以使用普通的JSON吗?

我的方法应该是什么?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

现在对紧耦合问题,我不认为这里有一个。 因为你正在使用一个类列表(并且你需要它们在两个或多个不同的位置/项目......)这不是耦合,这是重用相同的代码,这应该是一个很好的实践。

耦合是 - 例如 - 当Class AClass B的成员时,但是当您在2个不同的系统/组件中使用Class AClass B时,情况并非如此。

答案 1 :(得分:0)

  

我还需要在服务器端为GSON提供相同的BookingDTO   反序列化?

简单地说,是的,您必须准备POJO才能收到请求。因此,为此,JSON反序列化器将尝试解析JSON请求的属性并将其映射到服务器的POJO。

使用Spring,我们会执行以下操作。这是一个创建POST请求类型的控制器,期望具有BookingDTO类型的参数。我们使用Jackson库进行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对象。 / p>

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

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

希望你明白这一点。