【问题标题】:Send file through object type of web service response通过 Web 服务响应的对象类型发送文件
【发布时间】:2015-11-23 14:23:07
【问题描述】:

我有一个通过Spring实现的REST Web服务,它返回一个带有4个字段的对象响应,所以构造函数是:

Response(boolean status, boolean success, Object result, ErrorResponse error)

下面是网络服务:

@Override
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public @ResponseBody Response getAcquisition(@RequestParam(value="path", defaultValue="/home") String path){
        File file;
        try {
            file = matlabClientServices.getFile(path);
            if (file.exists())
                return new Response(true, true, file, null);
            else 
                return new Response(false, false, "File doesn't exist!", null);         
        } catch (Exception e) {
            ErrorResponse errorResponse= ErrorResponseBuilder.buildErrorResponse(e);
            LOG.error("Threw exception in MatlabClientControllerImpl::getAcquisition :" + errorResponse.getStacktrace());
            return new Response(false, false, "Error during file retrieving!", errorResponse);
        }       
    }

在响应的对象字段中,我想填充文件,因此当我调用此 Web 服务时,我可以从服务器检索文件。 但在我的客户端应用程序中,响应结果字段是字符串而不是文件。

@Override
@RequestMapping(value = "/test/", method = RequestMethod.GET)
public Response getFileTest(@RequestParam(value="path", defaultValue="/home") String path){
    RestTemplate restTemplate = new RestTemplate();
    Response response = restTemplate.getForObject("http://localhost:8086/ATS/client/file/?path={path}", Response.class, path);
    if (response.isStatus() && response.isSuccess()){
        @SuppressWarnings("unused")
        File fileLoaded= (File)response.getResult();
    }
    return response;
}

你知道错误在哪里吗?我的目标是从服务器发送文件并接收并将其存储在另一台电脑中。 感谢和问候 否则,如果我使用

@RequestMapping(value = "/{path}", method = RequestMethod.GET)
public @ResponseBody FileSystemResource getFile(@PathVariable("path") String path) {
    return new FileSystemResource(matlabClientServices.getFile(path)); 
}

如何检索文件并将其写入特定路径以及如何检查异常或其他错误?

【问题讨论】:

    标签: spring file rest serialization response


    【解决方案1】:

    从 Spring 控制器发送二进制文件不能简单地通过将文件分配给 bean 并返回该 bean 来完成! Spring 的内容协商很可能会在分派 HTTP 响应时将您的 bean 序列化为 XML 或 Json,这不会包含文件的数据。

    如果您的文件包含字符串数据,您可以尝试通过读取它并将其分配给字符串属性,使其成为 XML 或 JSON 的一部分。

    另一方面,如果文件包含二进制数据,例如视频或图像,您必须按照此处指示的方式自行发送:Downloading a file from spring controllers(向下滚动一点以查看@ResponseBody 解决方案)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      相关资源
      最近更新 更多