Spring RestTemplate将大文件转发到另一个服务

时间:2014-03-18 20:45:52

标签: java spring resttemplate

我正在尝试使用spring的resttemplate将一个大文件作为输入流转发到另一个服务。我已按照@artbristol在本主题中给出的答案:How to forward large files with RestTemplate?

看起来它正在正确设置请求的主体(使用charlesproxy获取请求)。问题是我没有正确设置标题,因为我认为我需要将content-type设置为multipart / formdata,我试着在回调中添加它:

request.getHeaders().setContentType(
                new MediaType("multipart", "form-data"));

但是在http标题中我仍然缺少边界,不知道如何设置它,我确信我可能错过了其他一些设置。

2 个答案:

答案 0 :(得分:0)

所以我能够弄清楚这一点。基本上我需要创建一个Spring消息转换器,它将接收输入流并写入正文。我也基本上必须使用Form Message Converter来写出响应主体。

所以在restTemplate中我调用了一个添加消息转换器来添加新的输入流消息转换器。在回调中,我创建了一个多值映射,它接受一个字符串和输入流并将其包装在HttpEntity周围。然后我创建一个Form Message转换器的新实例,并调用write,传入请求和mutlivaluemap。

答案 1 :(得分:0)

看起来问题是我没有在spark类路径中包含htrace-core.jar的路径: spark-shell --driver-class-path /opt/cloudera/parcels/CDH/lib/hbase/hbase-server.jar:/opt/cloudera/parcels/CDH/lib/hbase/hbase-protocol.jar:/opt /cloudera/parcels/CDH/lib/hbase/hbase-hadoop2-compat.jar:/opt/cloudera/parcels/CDH/lib/hbase/hbase-client.jar:/opt/cloudera/parcels/CDH/lib/hbase /hbase-common.jar:/opt/cloudera/parcels/CDH/lib/hbase/lib/htrace-core.jar:/etc/hbase/conf

似乎这对于spark 1.x来说是新的