废话不多说,直接上代码
这两天在做一个调用第三方接口传输文件的工能,但在调试过程中出现一个很奇怪的问题,当我把云端文件写到本地时候发送给第三方时,它能接收到文件对象,但这个文件对像的长度为0,也就是说这个文件没有实质性的意义。百思不得其解,那就一步一步调试吧!
结果发现我出于好心加的log在用fastjson 转义 参数时会出现这个问题!
运行结果:
restTemplate发送请求方法:
public static Map<String,Object> requestPostByFormData(MultiValueMap<String, Object> param, String url)
throws Exception {
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("multipart/form-data");
headers.setContentType(type);
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(param,headers);
Map<String,Object> result = restTemplate.postForObject(url, requestEntity,Map.class);
return result;
}
当场裂开!由于使用restTemplate的原因,你需要将参数组装进MultiValueMap这个集合中,而它在put文件时候又要把文件构造成FileSystemResource,当fastjson.toJsonString 转义这个 FileSystemResource 时,神奇的事情就发生了!
还有需要注意在往本地写文件的时候注意先刷新一下输出流。