1

我正在使用 Jersey & Jackson 来处理带有 JSON 的基于 Restful 的 Web 服务。

假设我有驻留在文件系统上的 json 文本文件(例如 customer.json)...

是否可以从实现 @GET 的 Restful 方法处理该 json 文件?

我需要在@GET 方法中使用Java 的文件I/O 上传文件吗?

任何帮助将不胜感激...

4

2 回答 2

0

如果 JSON 文件很小,可以,您可以在 URL 的末尾对其进行编码。

GET www.mydomain.tld/process/json/?string={ json: "testest" }

但实际上,没有。作为一种解决方法,您可以发送对该文件的引用,例如它所在的 url 或您之前将其发布到服务器的临时 GUID。

GET www.mydomain.tld/process/json/?file=http://www.otherdomain.tld/file.json

或者,第一次 POST 到具有整个文件内容的另一个控制器将返回一个 guid,服务器可以在随后的 GET 请求中使用该 guid 从本地存储或数据库获取上传的文件。

guid <-- POST www.mydomain.tld/upload/json/ {BIG JSON FILE}
GET www.mydomain.tld/process/json/?guid={guid}
于 2012-11-08T21:01:35.147 回答
0

不建议使用 GET,因为它被认为是一种“安全”的方法。见https://www.rfc-editor.org/rfc/rfc2616#page-51。您应该根据上传的最终结果使用 POST 或 PUT:PUT 以防后续上传不会更改服务器的状态,否则使用 POST。

Jersey 对上传有很好的支持。这是一个如何实现上传的好例子:http ://www.mkyong.com/webservices/jax-rs/file-upload-example-in-jersey/ 。

如果您不想像示例中那样将文件保存到磁盘,则可以使用 ByteArrayOutputStream 将文件存储在内存中。然后从中创建一个字符串:

String str = new String(byteArrayOutputStream.toByteArray(), "UTF-8");

然后创建您的 JSONObject:

JSONObject json = new JSONObhect(str);
于 2012-11-08T21:41:51.583 回答