[英]android rest template with multi-part request
case 1 : send Entity class as request [working] 情况1:发送Entity类作为请求[工作]
case 2 : send image(multipart) as request [working] 情况2:按要求发送图片(多部分)[工作]
case 3 : send entity + image [not working] 情况3:发送实体+图片[无效]
case 1 : 情况1 :
@RequestMapping(value = "/add", method = RequestMethod.POST)
public @ResponseBody String add(@RequestBody SampleEntity sampleEntity) {
return "From Server: " + sampleEntity.getId();
}
test case 1 测试案例1
sampleEntity.setId(123);
String response1 = restTemplate.postForObject(SERVER_URI+"add", sampleEntity, String.class);
System.out.println(response1);
Output : From Server: 123 输出:来自服务器:123
case 2 : 情况2:
@RequestMapping(value = "/imagepart", method = RequestMethod.POST)
public @ResponseBody String imagePart(@RequestPart("image") MultipartFile file) {
return "From Server(ImagePart): " + file.getOriginalFilename();
}
test case 2 测试案例2
MultiValueMap<String, Object> part1 = new LinkedMultiValueMap<String, Object>();
part1.add("image", new FileSystemResource("C:\\Users\\Public\\Pictures\\Sample Pictures\\Koala.jpg"));
String response2 = restTemplate.postForObject(SERVER_URI+"imagepart", part3, String.class);
System.out.println(response2);
Output : From Server(ImagePart): Koala.jpg 输出:来自服务器(ImagePart):Koala.jpg
case 3 : 情况3:
@RequestMapping(value = "/addimagepart", method = RequestMethod.POST)
public @ResponseBody String addPart(
@RequestPart("sampleEntity") SampleEntity sampleEntity,
@RequestPart("image") MultipartFile file) {
return "From Server(Part) : " + sampleEntity.getId() + " "
+ file.getOriginalFilename();
}
test case 3 测试案例3
sampleEntity.setId(2);
part.add("sampleEntity",sampleEntity);
part.add("image", new FileSystemResource("C:\\Users\\Public\\Pictures\\Sample Pictures\\Desert.jpg"));
String response2 = restTemplate.postForObject(SERVER_URI+"addimagepart", part, String.class);
System.out.println(response2);
Error : this case failed (entity class with image not working) 错误:此案例失败(带有图片的实体类不起作用)
how to make request Entity + Multipart Request from android rest template to spring mvc server 如何从android rest模板向spring mvc服务器发出请求实体+分段请求
In case 3 the FormHttpMessageConverter
is used to convert MultiValueMap
objects for sending in HTTP requests. 在情况3中, FormHttpMessageConverter
用于转换MultiValueMap
对象以在HTTP请求中发送。 Unfortunately, default FormHttpMessageConverter does not support conversion of entities to JSON. 不幸的是,默认的FormHttpMessageConverter不支持将实体转换为JSON。 Thus, You have to add some JSON converter (eg MappingJackson2HttpMessageConverter
) to FormHttpMessageConverter
manually. 因此,您必须手动将一些JSON转换器(例如MappingJackson2HttpMessageConverter
)添加到FormHttpMessageConverter
。 Try to use this code: 尝试使用以下代码:
FormHttpMessageConverter converter = new FormHttpMessageConverter();
converter.addPartConverter(new MappingJackson2HttpMessageConverter());
restTemplate.getMessageConverters().add(0, converter);
Instead of Multipartfile annotation, fetch multipart-data from request object 代替Multipartfile批注,从请求对象获取multipart-data
if (request instanceof MultipartHttpServletRequest) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Set set = multipartRequest.getFileMap().entrySet();
Iterator i = set.iterator();
while (i.hasNext()) {
Map.Entry me = (Map.Entry) i.next();
System.out.println("key :" + me.getKey() + "-"
+ me.getKey().getClass() + "|||||" + "value :"
+ me.getValue() + "-" + me.getValue().getClass());
switch ((String) me.getKey()) {
case "staffPhoto": {
System.out.println("case staffImage "
+ ((MultipartFile) me.getValue())
.getOriginalFilename());
// processImage
break;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.