gpt4 book ai didi

android - 通过 RestTemplate 发送多部分文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:02:37 27 4
gpt4 key购买 nike

我有一些关于通过 Spring restTemplate 使用 android 发送图像文件(多部分)的问题。

这是我在服务器上的 Controller :

@RequestMapping(value = "/uploadPhoto/{id}", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<String> uploadPhoto(@RequestParam("file") MultipartFile srcFile,
@PathVariable("id") Integer id) {

/// do something

return RestUtil.getJsonSHttptatus(HttpStatus.NOT_ACCEPTABLE);
}

这是我的 android Activity 中的休息请求

私有(private)无效 doUpload(){

        new AsyncTask<String, Void, String>() {

@Override
protected String doInBackground(String... params) {

FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
formHttpMessageConverter.setCharset(Charset.forName("UTF8"));


RestTemplate restTemplate = new RestTemplate();


restTemplate.getMessageConverters().add( formHttpMessageConverter );
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());


restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());

String uri = "http://localhost:8089/web/uploadPhoto/1";

String imagePath = "/mnt/sdcard/DCIM/Camera/IMG_20140406_130350.jpg";

MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();
map.add("expenseId", 1);
map.add("file", new FileSystemResource(path));

HttpHeaders imageHeaders = new HttpHeaders();
imageHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);

HttpEntity<MultiValueMap<String, Object>> imageEntity = new HttpEntity<MultiValueMap<String, Object>>(map, imageHeaders);



restTemplate.exchange(uri, HttpMethod.POST, imageEntity, Boolean.class);


return "";
}

@Override
protected void onPostExecute(String result) {
Toast.makeText(MainActivity.this, "Data : "+result,
Toast.LENGTH_LONG).show();
}
}.execute();
}

我收到这个错误:

04-07 07:21:00.312: E/AndroidRuntime(1205): Caused by: org.springframework.http.converter.HttpMessageNotWritableException: Could not write request: no suitable HttpMessageConverter found for request type [java.lang.Integer]
04-07 07:21:00.312: E/AndroidRuntime(1205): at org.springframework.http.converter.FormHttpMessageConverter.writePart(FormHttpMessageConverter.java:314)
04-07 07:21:00.312: E/AndroidRuntime(1205): at org.springframework.http.converter.FormHttpMessageConverter.writeParts(FormHttpMessageConverter.java:276)
04-07 07:21:00.312: E/AndroidRuntime(1205): at org.springframework.http.converter.FormHttpMessageConverter.writeMultipart(FormHttpMessageConverter.java:266)
04-07 07:21:00.312: E/AndroidRuntime(1205): at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:209)
04-07 07:21:00.312: E/AndroidRuntime(1205): at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:91)
04-07 07:21:00.312: E/AndroidRuntime(1205): at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:624)
04-07 07:21:00.312: E/AndroidRuntime(1205): at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:474)
04-07 07:21:00.312: E/AndroidRuntime(1205): at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:439)
04-07 07:21:00.312: E/AndroidRuntime(1205): at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:415)
04-07 07:21:00.312: E/AndroidRuntime(1205): at com.sample.rest.client.MainActivity$4.doInBackground(MainActivity.java:295)
04-07 07:21:00.312: E/AndroidRuntime(1205): at com.sample.rest.client.MainActivity$4.doInBackground(MainActivity.java:1)

我的代码有什么问题?任何用于多部分请求的 HttpMessageConverter?

谢谢

最佳答案

FormHttpMessageConverter 不能写入 expenseId 部分,因为它是一个整数。尝试将其作为字符串发送:

map.add("expenseId", "1");

并作为字符串接收:

@PathVariable("id") String id

有一个很相似的问答here .

关于android - 通过 RestTemplate 发送多部分文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22906611/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com