我正在使用Jersey&杰克逊用JSON处理基于Restful的Web服务。
假设我有一个驻留在文件系统上的json文本文件(例如customer.json)......
是否可以从实现@GET的Restful方法处理该json文件?
我是否需要在@GET方法中使用Java的File I / O上传文件?
任何帮助将不胜感激......
答案 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);