Java HttpClient检查错误消息的响应库

Java HttpClient检查错误消息的响应库,java,file,io,httpclient,response,Java,File,Io,Httpclient,Response,我有一个httpclient,它获取一个流式xls文件并将其写入临时文件。但是,响应可能会返回错误消息,其中包含200代码 在写入文件之前,是否需要检查流回的responseBody 例如,如果有错误,它将返回包含单词error的HTML。所以我想检查它,如果它存在,退出该方法并向前端返回一个失败代码 前端使用从extjs网格中调用的AJAXRequest public void getReport(String login, String date, String type, String

我有一个httpclient,它获取一个流式xls文件并将其写入临时文件。但是,响应可能会返回错误消息,其中包含200代码

在写入文件之前,是否需要检查流回的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);
    }

响应应具有内容类型标题。只要检查一下,如果是text/html,那就是一个错误;如果是application/ms excel或application/vnd.ms-excel,那就检查一下你的,那就是你想要的。另外,excel响应通常具有内容配置。

然后如何告知ajax请求失败?仍然不确定,只需检查失败请求的响应头和使用.xls的正确响应头。至少内容类型应该不同。不,我的意思是,即使返回错误,响应代码始终为200。如何在httpclient中更改此设置,以便前端的ajax请求知道发生了错误?200是一个状态代码。我说的是响应标题。请参阅getResponseHeaders方法。如果您查看我询问的问题是否存在,请退出该方法并将失败代码返回前端