废话不多说,直接上代码

restTemplate上传文件会导致的文件大小为0的原因(fastjson)

这两天在做一个调用第三方接口传输文件的工能,但在调试过程中出现一个很奇怪的问题,当我把云端文件写到本地时候发送给第三方时,它能接收到文件对象,但这个文件对像的长度为0,也就是说这个文件没有实质性的意义。百思不得其解,那就一步一步调试吧!

结果发现我出于好心加的log在用fastjson 转义 参数时会出现这个问题!

运行结果:

restTemplate上传文件会导致的文件大小为0的原因(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 时,神奇的事情就发生了!

还有需要注意在往本地写文件的时候注意先刷新一下输出流。

相关文章: