在swift中解码base64编码的应用程序引擎数据的问题

时间:2015-12-10 13:30:33

标签: swift google-app-engine google-cloud-endpoints

我正在开发从Google端点获取数据的ios app,数据在服务器上以64位编码为自定义java对象,然后由端点方法返回。

在iOS端,我可以使用生成的客户端代码接收数据并打印数据。

我遇到问题,我无法将数据解码回GTL ****端点自动生成的类。

解码数据显示一些十六进制数字: 我的代码:

let respo2 = GTLDecodeBase64(responce) as? GTLEndpointStatusCollection

我也尝试使用swift类进行解码:

let respo = NSData(base64EncodedString: responce, options: NSDataBase64DecodingOptions(rawValue: 0))

输入是base64编码的:rO0ABXNyABNqYXZhLnV0aWwuQXJyYXlMaXN0eIHSHZnHYZ ......

所需的输出应该是可读数据, 但我得到了:

<aced0005 73720013 6a617661 2e757469 6c2e4172 7261794c.....

我甚至尝试使用NSUTF8对base64解码数据进行编码和解码 但没用。

我做错了什么?是否可以将Java中的服务器(带有自定义Java对象)编码的数据解码回来? (我了解Google端点之间的序列化/反序列化)

提前致谢。

1 个答案:

答案 0 :(得分:0)

您应该使用JSON进行序列化,而不是手动将对象转换为bytestring和base64编码。如果您正在使用端点库,则只需返回方法中的对象即可自动完成。有关详细信息,请参阅文档here以获取示例和其他Endpoints文档。要使用API​​,您可以使用生成的iOS库,这些库也可以根据示例here为您执行此操作。除非您检查HTTP流量或使用API Explorer,否则您实际上看不到任何JSON。

听起来你可能只是做了比预编码对象更多的工作,而不仅仅是让Endpoints为你做。如果您确实需要手动将对象序列化为某个属性,则可以使用端点一侧的库(如Jackson)将对象序列化为字符串属性,并将客户端上的NSJSONSerialization转换回对象