Spring MVC application not accepting JSON
I needed to add the following to the jsonConverter bean.
<property name="prefixJson" value="false"/>
Final Bean was as follows
<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
zmanc
Updated on November 17, 2020Comments
-
zmanc over 3 years
I cannot figure out why I cannot post updates to my controller. I am trying to submit json data via a chrome addon. Eventually I will be using angular for the requests. I checked against other stackoverflow articles and it seems I have everything that they suggest.
For what its worth I have a GET request to the same controller that is working without issue.
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.
My server log shows the following
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)
Post to address
http://localhost:8082/service/products/addProduct
Data being posted
{ "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 } }
Controller mapping
@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>
_ UPDATE __
I started using amplify to do my requests because I wanted to be sure that it was not the chrome addon. I am getting a 400 now. Below is the error showing on my server.
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: org.apache.catalina.connector.CoyoteInputStream@28d528d5; 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: org.apache.catalina.connector.CoyoteInputStream@28d528d5; line: 1, column: 1
Here is the amplify definition and request.
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") } });
Data:
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 } }];