使用@GET在文件系统上处理JSON文件?

时间:2012-11-08 20:38:14

标签: json file-io jersey

我正在使用Jersey&杰克逊用JSON处理基于Restful的Web服务。

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

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

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

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

2 个答案:

答案 0 :(得分: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 <-- POST www.mydomain.tld/upload/json/ {BIG JSON FILE}
GET www.mydomain.tld/process/json/?guid={guid}

答案 1 :(得分:0)

不建议使用GET,因为它被认为是“安全”的方法。见http://tools.ietf.org/html/rfc2616#page-51。您应该使用POST或PUT,具体取决于您上传的最终结果:PUT,以防后续上传不改变服务器的状态或POST。否则。

泽西岛对上传有很好的支持。以下是如何实现上传的一个很好的示例: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);