RestTemplate需要MultipartFile参数'file'不存在

时间:2016-10-04 11:31:20

标签: spring resttemplate

我有一个Spring控制器,其定义如下:

class myClass: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        cityLabel.text = settings.SharedInstance.city
        settings.SharedInstance.city = cityLabel.text
    }

}

当我使用邮差时,我的请求成功了。当我使用RestTemplate从另一个Spring服务发出请求时,我收到以下错误:

@RequestMapping(method = RequestMethod.POST, value = "/upload")
    @ResponseBody
    public void handleFileUpload2(@RequestParam("file") MultipartFile file){

以下是我使用RestTemplate发出请求的方法。

{"timestamp":1475579425804,"status":400,"error":"Bad Request","exception":"org.springframework.web.bind.MissingServletRequestParameterException","message":"Required MultipartFile parameter 'file' is not present","path":"/upload"}

我无法弄清楚我在做错了什么。 This问题似乎表明您需要添加一些xml才能使其正常工作,但由于它可以使用Postman,我相信实际问题与我如何使用RestTemplate进行其余调用有关。

如果我打印出public void uploadFile(MultipartFile file, String url) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FORM_DATA); MultiValueMap<String, Object> body = new LinkedMultiValueMap<>(); body.add("file", new ByteArrayResource(file.getBytes())); RestTemplate restTemplate = new RestTemplate(); HttpEntity requestEntity = new HttpEntity(body, headers); restTemplate.exchange(url, method, requestEntity, String.class); } ,我会得到以下内容:

requestEntity

我正在使用<{file=[resource loaded from byte array]},{Content-Type=[multipart/form-data]}>

3 个答案:

答案 0 :(得分:0)

<beans:bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- setting maximum upload size -->
        <beans:property name="maxUploadSize" value="100000" />
    </beans:bean>

确保您已在弹簧配置文件中添加此代码,它可能适合您。

答案 1 :(得分:0)

回答这个问题太迟了。但是我的回答可能对正在寻找此问题的人有所帮助。

我遇到了类似的问题,改变了为我读取文件解决问题的方式。

body.add("file",new FileSystemResource(TEST_PDF_FILE_PATH));

答案 2 :(得分:0)

代替

body.add("file", new ByteArrayResource(file.getBytes()));

尝试

body.add("file", file.getResource());

对我有用。