Wiosenna aplikacja MVC nie akceptująca JSON
Nie mogę zrozumieć, dlaczego nie mogę opublikować aktualizacji mojego kontrolera. Próbuję przesłać dane json za pośrednictwem dodatku chrome. Ostatecznie będę używał kanciastych dla żądań. Sprawdziłem w stosunku do innych artykułów stackoverflow i wydaje się, że mam wszystko, co sugerują.
Na co warto mieć żądanie GET do tego samego kontrolera, który działa bez problemu.
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.
Dziennik mojego serwera pokazuje następujące informacje
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)
Wyślij na adres
http://localhost:8082/service/products/addProduct
Dane są publikowane
{
"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
}
}
Mapowanie kontrolera
@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>
_ AKTUALIZACJA__
Zacząłem używać wzmacniacza, aby spełnić moje prośby, ponieważ chciałem mieć pewność, że nie był to dodatek do chromu. Teraz dostaję 400. Poniżej znajduje się błąd wyświetlany na moim serwerze.
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
Oto definicja wzmocnienia i prośba.
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")
}
});
Dane:
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
}
}];