0
私は、ストリームされたxlsファイルを取得し、それを一時ファイルに書き込むhttpclientを持っています。ただし、応答は200コードでエラーメッセージを返すことができます。Java HttpClient check responseBodyエラーメッセージ
responseBodyがファイルに書き込まれる前にストリームバックされているかどうかを確認する方法はありますか。
たとえば、エラーがある場合、ERRORという単語を含むHTMLが返されます。だから私は、それが存在する場合は、メソッドを終了し、フロントエンドに失敗コードを返すことを確認したいと思います。
フロントエンドは、extjsグリッド内から呼び出されたAJAXRequestを使用します。
public void getReport(String login, String date, String type, String id){
String url = "http://...";
HttpClient client = new HttpClient();
KerberizedNetegrityClient auth;
try {
auth = new KerberizedNetegrityClient();
cookie = auth.getCookieToken();
} catch (NetegrityClientException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
GetMethod method = new GetMethod(url);
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));
method.setRequestHeader("Cookie", cookie);
try{
int statusCode = client.executeMethod(method);
if(statusCode != HttpStatus.SC_OK){
System.err.println("Method Failed: "+method.getStatusLine());
}
file = "file.xls";
InputStream is = method.getResponseBodyAsStream();
BufferedInputStream bis = new BufferedInputStream(is);
FileOutputStream fos = new FileOutputStream(file);
byte[] bytes = new byte[8192];
int count = bis.read(bytes);
while(count != -1 && count <= 8192){
System.err.println("-");
fos.write(bytes,0,count);
count = bis.read(bytes);
}
if(count != -1){
fos.write(bytes,0,count);
}
fos.close();
bis.close();
method.releaseConnection();
System.out.println("Done");
}catch (HTTPException e){
System.err.println("Fatal protocol violation: "+ e.getMessage());
e.printStackTrace();
} catch (IOException e) {
System.err.println("Fatal transport error: "+ e.getMessage());
e.printStackTrace();
}finally{
method.releaseConnection();
}
streamReport(file);
}
どのようにしてajaxリクエストに失敗したと伝えますか?それでもまだ分かりません – pm13
失敗したリクエストの応答ヘッダと '.xls'を使って正しいヘッダを調べてください。少なくとも 'content-type 'は異なっていなければなりません。 – kan
私が言ったことはまったくありません、エラーが返されたとしても、応答コードは常に200です。フロントエンドのajaxリクエストがエラーが発生したことを知るように、これをhttpclientでどのように変更するのですか? – pm13