私はJersey&Jacksonを使用して、JSONでRestfulベースのWebサービスを処理しています。
ファイルシステム上にあるjsonテキストファイル(例:customer.json)があるとしましょう...
@GETを実装するRestfulメソッドからそのjsonファイルを処理することは可能ですか?
@GETメソッド内でJavaのファイルI/Oを使用してファイルをアップロードする必要がありますか?
どんな助けでも大歓迎です...
GETは「安全な」方法と見なされるため、お勧めしません。https://www.rfc-editor.org/rfc/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);
JSON ファイルが小さい場合は、はい、URL の末尾にエンコードできます。
GET www.mydomain.tld/process/json/?string={ json: "testest" }
しかし、現実的には、いいえ。回避策として、ファイルがある場所の URL や以前にサーバーに POST した一時 GUID など、ファイルへの参照を送信できます。
GET www.mydomain.tld/process/json/?file=http://www.otherdomain.tld/file.json
または、ファイルの内容全体を含む別のコントローラーへの最初の POST は、ローカル ストレージまたはデータベースからアップロードされたファイルを取得するために、サーバーが後続の GET 要求で使用できる GUID を返します。
guid <-- POST www.mydomain.tld/upload/json/ {BIG JSON FILE}
GET www.mydomain.tld/process/json/?guid={guid}