2015-11-16 35 views
5

पर एक फ़ाइल और JSON डेटा पोस्ट करना मैं एक फ़ाइल अपलोड करने के लिए स्प्रिंग आराम सेवा का निर्माण कर रहा हूं। एक ऐसा फॉर्म है जिसमें फ़ाइल अपलोड करने के लिए विभिन्न फ़ील्ड और एक फ़ील्ड शामिल है। उस फॉर्म को सबमिट करने पर, मैं एक मल्टीपार्ट फॉर्म अनुरोध भेज रहा हूं यानी Content-Typemultipart/form-data के रूप में।स्प्रिंग रेस्ट सेवा

तो मैं के साथ नीचे

@RequestMapping(value = "/companies", method = RequestMethod.POST) 
    public void createCompany(@RequestBody CompanyDTO companyDTO, @RequestParam(value = "image", required = false) MultipartFile image){ 
................. 

लेकिन, इसके बाद के संस्करण काम नहीं किया की कोशिश की। तो कुछ समय के लिए, मैं स्ट्रिंग के रूप में JSON डेटा भेजा है और कंपनी वस्तु JSON स्ट्रिंग के रूप गुजर बिना

@RequestMapping(value = "/companies", method = RequestMethod.POST) 
     public void createCompany(@RequestParam("companyJson") String companyJson, @RequestParam(value = "image",required = false) MultipartFile image) throws JsonParseException, JsonMappingException, IOException{ 
      CompanyDTO companyDTO = new ObjectMapper().readValue(companyJson, CompanyDTO.class); 
............................. 

मैं @RequestBody साथ JSON डेटा नहीं भेज सकता की तरह बाकी सेवा में कि स्ट्रिंग से बनने वाले?

+0

http://stackoverflow.com/questions/4083702/posting-a-file-and-data-to-restful-webservice-as-json का डुप्लिकेट –

+0

http यह भी देखना हो सकता है। com/प्रश्न/15502054/spring-mvc-requestbody-give-me-an-blank-string-when-use-with-requestparam-multi –

+1

समस्या '@ अनुरोधबॉडी' है, http://stackoverflow.com/questions देखें/2 9370143/वसंत-एमवीसी-अपलोड-फ़ाइल-साथ-अन्य फ़ील्ड – tungd

उत्तर

0

यूआरएल के मानों को जोड़ना जो आप अब @RequestParam का उपयोग कर कर रहे हैं।

@RequestParam एनोटेशन जटिल JSON ऑब्जेक्ट्स के लिए काम नहीं करेगा, यह इंटीजर या स्ट्रिंग के लिए निर्दिष्ट है।

यदि यह एक HTTP POST विधि है, @RequestBody के उपयोग POJO यू क्या बनाया है (हालत: POJO नक्शे यदि भेजे JSON) को भेजे अनुरोध मैप करने के लिए स्प्रिंग कर देगा

+0

पर सेट हैं लेकिन यह मल्टीपार्ट अनुरोध – Anand

+0

के साथ काम नहीं कर रहा है मल्टीपार्ट अनुरोध को संभालने के लिए उपयोग किया जाता है फाइलें, जब आपको इसकी आवश्यकता नहीं है तो आप इसे छोड़ सकते हैं – KaMaL

+0

इसे कैसे छोड़ें? – Anand

0

FormData बनाने () और अपने json संलग्न करें और

 if (form.validate()) { 
     var file = $scope.file; 
     var fd = new FormData(); 
     fd.append('jsondata', $scope.jsonData); 
     fd.append('file', file); 
     MyService.submitFormWithFile('doc/store.html', fd, '', (response){ 
      console.log(response) 
     }); 
    } 

// सेवा

01 ObjectMapper का उपयोग कर

MyService.submitFormWithFile = function(url, data, config, callback) { 
    $http({ 
     method : 'POST', 
     url : url, 
     headers : { 
      'Content-Type' : undefined 
     }, 
     data : data, 
     transformRequest : function(data, headersGetterFunction) { 
      return data; 
     } 
    }).success(function(response, status, header, config) { 
     if (status === 200) { 
      callback(response); 
     } else { 
      console.log("error") 
     } 
    }).error(function(response, status, header, config) {   
      console.log(response); 
    }); 
}; 

// आपके जावा भाग में ऊपर में कहा जाता है फ़ाइल // stackoverflow:

//it is like string 
fd.append('jsondata', JSON.stringify($scope.jsonData)); 



    @Autowired 
    private ObjectMapper mapper; 

@RequestMapping(value = "/companies", method = RequestMethod.POST) 
    public void createCompany(@RequestParam String jsondata, 
     @RequestParam(required = true) MultipartFile file){ 


     CompanyDto companyDto=mapper.readValue(jsondata, CompanyDTO.class); 
     ...... 
} 
संबंधित मुद्दे