2013-02-28 11 views
6

स्वीकार नहीं कर रहा है, मुझे पता नहीं लगा कि मैं अपने नियंत्रक को अपडेट क्यों पोस्ट नहीं कर सकता। मैं क्रोम एडन के माध्यम से जेसन डेटा जमा करने की कोशिश कर रहा हूं। आखिरकार मैं अनुरोधों के लिए कोणीय का उपयोग करूँगा। मैंने अन्य स्टैकओवरफ्लो लेखों के खिलाफ जांच की और ऐसा लगता है कि मेरे पास सब कुछ है जो वे सुझाव देते हैं।वसंत एमवीसी अनुप्रयोग JSON

इसके लायक मेरे पास एक ही नियंत्रक के लिए एक अनुरोध है जो बिना किसी समस्या के काम कर रहा है।

HTTP Status 415 - The server refused this request because the request entity is in a format not supported by the requested resource for the requested method. 

मेरे सर्वर लॉग

http://localhost:8082/service/products/addProduct 

डाटा पोस्ट किए जाने से

{ 
    "productId": 2, 
    "productModel": "Product Model 2", 
    "productName": "Product Name 2", 
    "dateAdded": 1361880001000, 
    "productWeight": 2, 
    "productStatus": "Hidden", 
    "productTaxClass": { 
     "taxId": 2, 
     "taxClassTitle": "High Tax Class", 
     "taxClassDescription": "This is a high tax class", 
     "lastModified": 1361880001000, 
     "dateAdded": 1361880001000 
    }, 
    "productImages": { 
     "imageId": 2, 
     "imageDescription": "Product Image 2", 
     "imageTitle": "Image 2", 
     "imagePath": "prd_02.jpg", 
     "imageRelation": 1 
    }, 
    "productManufacturer": { 
     "manufacturerId": 2, 
     "manufacturerName": "Factory 2", 
     "manufacturerImage": null 
    }, 
    "quantityAvailable": 4, 
    "quantityInWarehouse": 4, 
    "stockAlert": 1, 
    "productCost": 1, 
    "productRetail": 1, 
    "productPrice": 1, 
    "productSalePrice": 1, 
    "saleInd": null, 
    "productSku": null, 
    "backOrderMessage": null, 
    "inStockMessage": null, 
    "outOfStockMessage": null, 
    "manufacturerproductsku": null, 
    "productDescriptionId": { 
     "productTextId": 2, 
     "productTextData": "Este es en espanol", 
     "lastModified": 1361793601000 
    } 
} 

नियंत्रक मानचित्रण

संबोधित करने के लिए निम्नलिखित

INFO - Mapped "{[/service/products/addProduct],methods=[POST],params=[],headers=[],consumes=[application/json],produces=[],custom=[]}" onto public void com.cr.controllers.ProductsController.addProduct(com.cr.entity.Products) 

पोस्ट से पता चलता

@RequestMapping(value = "/service/products/addProduct", 
     consumes = "application/json", 
     method= RequestMethod.POST) 
public @ResponseBody void addProduct(@RequestBody Products products){ 
    productsDao.createProduct(products); 
} 

web.xml

<servlet-mapping> 
     <servlet-name>cr</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <filter> 
     <filter-name>httpMethodFilter</filter-name> 
     <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>httpMethodFilter</filter-name> 
     <servlet-name>cr</servlet-name> 
    </filter-mapping> 

_ अद्यतन _ _

मैं अपने अनुरोध करने के लिए बढ़ाना क्योंकि मुझे यकीन है कि यह क्रोम नहीं था बनना चाहता था का उपयोग शुरू किया ऐड ऑन। मुझे अब 400 मिल रहा है। नीचे मेरे सर्वर पर त्रुटि दिखाई दे रही है।

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Can not deserialize instance of com.cr.entity.Products out of START_ARRAY token 
at [Source: [email protected]; line: 1, column: 1]; nested exception is org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of com.cr.entity.Products out of START_ARRAY token 
at [Source: [email protected]; line: 1, column: 1 

यहां विस्तार परिभाषा और अनुरोध है।

amplify.request.define("addRequest", "ajax", { 
      url: "service/products/addProduct", 
      type: "POST", 
      dataType: 'json', 
      contentType: 'application/json' 
     }); 
     amplify.request({ 
      resourceId: "addRequest", 
      data: JSON.stringify(jsonData), 
      success: function() { 
       alert("success") 
      }, 
      error: function() { 
       alert("fail") 
      } 
     }); 

डाटा:

var jsonData = [{ 
    "productId": 4, 
    "productModel": "Product Model 2", 
    "productName": "Product Name 2", 
    "dateAdded": 1361880001000, 
    "productWeight": 2, 
    "productStatus": "Hidden", 
    "productTaxClass": { 
     "taxId": 2, 
     "taxClassTitle": "High Tax Class", 
     "taxClassDescription": "This is a high tax class", 
     "lastModified": 1361880001000, 
     "dateAdded": 1361880001000 
    } 
}]; 
+2

इस प्रकार था, आवेदन/json – gouki

+2

वसंत MVC जैक्सन पर निर्भर करता है (या तो 1 या 2) जेएसओएन इनपुट या आउटपुट को संभालने के लिए। क्या आपके क्लासपाथ में कोई जैक्सन लाइब्रेरी है? –

+0

डेटा को सबमिट करने वाले आपके क्लाइंट साइड कोड को पोस्ट करें, यह समस्या क्लाइंट साइड – Kris

उत्तर

5

मैं jsonConverter सेम के लिए निम्न जोड़ने की जरूरत है।

<property name="prefixJson" value="false"/> 

अंतिम बीन के रूप में यदि अपने ग्राहक उचित Content-Type हैडर भेज रहा है आप जांच कर सकता है

<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
     <property name="prefixJson" value="false"/> 
     <property name="supportedMediaTypes" value="application/json"/> 
    </bean> 

Another Stack Overflow Article

संबंधित मुद्दे