我是GSON,JSON&的新手。因此问这个问题:
在android端,我必须将预订信息发送到服务器上的REST WS。所以这是一个问题:
我有一个BookingDTO&我用GSON来序列化它。我在服务器上发送REST WS。现在我还需要在服务器端使用相同的BookingDTO进行GSON反序列化吗? (但那意味着紧耦合吗?)我是否必须使用GSON或者我可以使用普通的JSON吗?
我的方法应该是什么?
答案 0 :(得分:1)
您可以使用 Json 并将该内容解析为您的对象,或直接处理您的方法(服务器端)中的JsonObject
和JsonArray
。
如果你想使用像BookingDTO
这样的对象,你可以在android项目上重新创建类,或者从服务器端重用这些类,(反之亦然)。
创建 JAR 文件,该文件仅包含所有POJO类所在的类(例如,仅限导出模型包)。
使用JAR文件可以保持服务器和客户端代码之间的一致性,当您添加/删除字段时,您不必更改2个类,只需在一个位置更改并重新导出JAR。
现在对紧耦合问题,我不认为这里有一个。 因为你正在使用一个类列表(并且你需要它们在两个或多个不同的位置/项目......)这不是耦合,这是重用相同的代码,这应该是一个很好的实践。
耦合是 - 例如 - 当Class A
是Class B
的成员时,但是当您在2个不同的系统/组件中使用Class A
和Class 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中获取数据来构建不同的对象。
希望你明白这一点。