2014-07-07 24 views
1

殼體1:發送實體類作爲請求[工作]機器人其餘模板

情況2:發送圖像(多部分)作爲請求[工作]

殼體3:發送實體+圖像[不工作]

殼體1:

@RequestMapping(value = "/add", method = RequestMethod.POST) 
public @ResponseBody String add(@RequestBody SampleEntity sampleEntity) { 
    return "From Server: " + sampleEntity.getId(); 
} 

測試用例1

sampleEntity.setId(123); 
String response1 = restTemplate.postForObject(SERVER_URI+"add", sampleEntity, String.class); 
System.out.println(response1); 

輸出:從服務器:123

殼體2:

@RequestMapping(value = "/imagepart", method = RequestMethod.POST) 
public @ResponseBody String imagePart(@RequestPart("image") MultipartFile file) { 
    return "From Server(ImagePart): " + file.getOriginalFilename(); 
} 

測試用例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); 

輸出:從服務器(ImagePart):考拉.jpg

案例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(); 

} 

測試用例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); 

錯誤:這種情況下失敗(含圖片不能正常工作的實體類)

如何使請求Entity + Multipart Request from android rest template to spring mvc server

+0

你搞清楚這個問題取多數據?我面臨與你同樣的問題..請分享你的發現 –

回答

0

在情況3下,使用FormHttpMessageConverterMultiValueMap對象轉換爲用於發送HTTP請求的對象。不幸的是,默認的FormHttpMessageConverter不支持將實體轉換爲JSON。因此,您必須手動添加一些JSON轉換器(例如MappingJackson2HttpMessageConverter)到FormHttpMessageConverter。嘗試使用此代碼:

FormHttpMessageConverter converter = new FormHttpMessageConverter(); 
converter.addPartConverter(new MappingJackson2HttpMessageConverter()); 
restTemplate.getMessageConverters().add(0, converter); 
0

代替Multipartfile註釋,從要求對象

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; 
       } 
}