响应标头未定义

时间:2017-08-31 01:34:25

标签: javascript angularjs rest http-headers jax-rs

我从Angular调用Web服务

return $http.post(url_base 'appointment/export/', filter)
  .then(handleSuccessHeaders, handleError('Error exporting file')); 

function handleSuccessHeaders(data, status, headers, config) {
    var res = {data:data, status:status, headers:headers,config:config}; 
    return res;
}

这些服务用于导出Excel文件,如果我使用客户端我无法下载文件(我看到标题),但我需要标题,因为我需要重要信息,但始终未定义。

这是服务定义

@POST
    @Path("/export/")
    @Consumes({MediaType.APPLICATION_JSON})
    @Produces({MediaType.APPLICATION_OCTET_STREAM})
    public Response exportInformation(AppointmentFilterDTO filter) {

        String pathFile = "/home/files/test.xlsx"

            File file = new File(pathFile);
            if (file.exists()) {
                java.nio.file.Path path = file.toPath();
                return Response
                        .ok(new OutputStreamImplementation(path), MediaType.APPLICATION_OCTET_STREAM)
                        .header("content-disposition", "attachment; filename =" + path.getFileName().toString())
                        .header("Content-Length", file.length())
                        .header("success", true)
                        .header("contentType", "application/vnd.ms-excel")
                        .build();
            } else {
                return Response.ok()
                        .header("success", false)
                        .build();
            }
    }

所以我不知道我做错了什么,或者我错过了什么,我尝试从data.headers()获取标题,但它也不起作用

1 个答案:

答案 0 :(得分:0)

最后,在尝试了很多事情之后,我意识到错误不在Angular方面,我只是暴露了我希望在使用Access-Control-Expose-Headers消费Web服务时可见的自定义标头,因为我&#39 ;我使用CORS,我只需要在conf类中添加它们:

corsFilter.setExposedHeaders("header1,header2,header3");

我还在服务调用中使用了一个参数。