我通过Spring restTemplate使用android发送图像文件(multipart)有一些问题.
这是我服务器上的控制器:
@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);
}
Run Code Online (Sandbox Code Playgroud)
这是我的Android活动中的休息请求
private void 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 …Run Code Online (Sandbox Code Playgroud) 我需要从手机上读取代理信息,如果手机在代理下,我需要在我的spring restTemplate对象上设置这个代理.我尝试了以下代码没有任何运气,任何人都可以告诉我我在做什么错误.
String proxyHost = android.net.Proxy.getHost(activity
.getApplicationContext());
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, 8080));
requestFactory.setProxy(proxy);
RestTemplate rest = new RestTemplate(requestFactory);
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
我在我的android应用程序上使用restTemplate(来自spring android框架)通过post联系rest服务器,我使用AsyncTask发送请求和两个类Request和Response,它们是POJO以Json形式发送。
public class RequestSender extends AsyncTask<Object, Void, Response> {
private RestTemplate restTemplate = new RestTemplate();
private static final String SERVER_REQUEST_PATH = "/path/to/rest/service";
@Override
protected Response doInBackground(Object... args) {
String url = (String) args[0] + SERVER_REQUEST_PATH;
Request requestArgs = (Request) args[1];
Response response = null;
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
try {
response = restTemplate.postForObject(url, requestArgs, Response.class);
} catch (RestClientException e) {
e.printStackTrace();
response = null;
}
return response;
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,代码非常简单,并且大部分时间都可以正常工作,但不是按特定顺序运行的:
然后服务器重启后的第一个请求(第 3 步)不是通过 postForObject(...) 方法发送到服务器的,而是接下来的请求。第一个请求给我一个错误:
07-10 10:24:13.402: W/System.err(4827): …Run Code Online (Sandbox Code Playgroud)