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