データを送信し、サーバー上で計算して結果を返すために、JavaでいくつかのREST Webサービスを作成しようとしています。最初の段階では、Excelファイルとして情報を送受信します(将来はXMLまたはJSONを使用することをお勧めします)。 さて、それを試してみたり、たくさんの投稿を読んだら、私はそれを達成するのに非常に近いと思われますが、サーバーの最終応答を得る方法はわかりません。 は、私はこのようなサービスがあります。REST Webサービスからカスタマイズされたレスポンスとファイルを受け取る
@GET
@Path("/test")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response getFile(@QueryParam("IDfile") String IDfile) {
if(IDfile.trim().length() == 0 || IDfile == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("IDfile cannot be blank").build();
}
String uploadedFileLocation = "C:\\FilesWebservice\\" + IDfile;
Boolean sortida = false;
try {
prova prueba = new prova();
sortida = prueba.prova(uploadedFileLocation); //this creates an xls file as response
} catch (Exception ex) {
System.out.println("error" + ex.toString());
Logger.getLogger(ServiceResource.class.getName()).log(Level.SEVERE, null, ex);
}
if (sortida) {
File file = new File("C:\\FilesWebservice\\out\\prediction.xls"); // the File path you want to serve.
return Response.ok(file, MediaType.APPLICATION_OCTET_STREAM)
.header("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"") //optional
.build();
} else
return Response.status(500).entity("It was unable to calculate (Ask God for the reason)").build();
}
私は私が私のダウンロードフォルダ内のファイルを受け取るブラウザからGETを送信するが、私は他のアプリケーションとサービスを消費する必要がある場合には、[OK]を動作します。したがって、私はNetbeansでクライアントを開発しています。その後、NBはWebサービスに従って自動コードを作成しました。この場合、私は持っています:
多分、私はいくつかの行を追加しました、私は今思い出すことができません。とにかく、サービスはステータスコード、カスタマイズされたメッセージ、および添付ファイルとしてファイルを返します。私は、少なくともステータスコードを読んで、明らかにファイルを保存したいが、私はそれをどうやって行うことができるのか分からない。
MyJerseyClientAlgA client = new MyJerseyClientAlgA("192.168.1.30");
Object response = client.getFile(Response.class, "3cphkhfu.xls");
が、私が「応答」から必要な情報を抽出するために失敗した: は、私が実行しようとしました。 ヘルプやアイデアをいただければ幸いです。事前に
感謝
EDIT:あなたの返事を@LutzHorn
感謝。私はあなたの提案をよく理解しているかどうか分からず、いくつかのテストを行い、解決策が見つかったら私の質問のもとに投稿します。とにかく、私は再びRESTサービスを利用するための自動コードを生成し、それは次のようになります。
public <T> T getFile(Class<T> responseType, String IDfile) throws ClientErrorException {
WebTarget resource = webTarget;
if (IDfile != null) {
resource = resource.queryParam("IDfile", IDfile);
}
resource = resource.path("test");
return resource.get(responseType);
}
が、私は最後の行でエラーが発生していることを示し:メソッドget(: シンボルに
シンボルを見つけることができませんクラス)
ので、私は
リターンresource.request(MediaType.APPLICATION_OCTET_STREAM_TYPE)に.get(responseType)のために、この行を変更。
しかし、これが正しいかどうかはわかりません。
'resource.request'を返すのではなく、ローカル変数に割り当てます。 NetBeansはこの変数の正しいタイプの設定に役立ちます。次に、ステータスコードと応答本文にアクセスできます。 –