我有一个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]}>
答案 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());
对我有用。