我在视图方面有以下json请求
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript" >
$(document).ready(function(){
sendAjax();
});
function sendAjax() {
$.ajax({
url: "/shop/main/order/model",
type: 'POST',
dataType: 'json',
data: " { \"totalPrice\": 10, \"custumerName\":\"vasiya\", \"ItemsList\": [ { \"id\": 1,\"name\":\"qqq\", \"price\": 10, \"count\": 2 } ] }",
contentType: 'application/json',
mimeType: 'application/json',
success: function(data) {
alert(data.totalPrice + " " + data.custumerName);
},
error:function(data,status,er) {
alert("error: "+data+" status: "+status+" er:"+er);
}
});
}
</script>
</body>
</html>
controller
看起来像这样
@Controller
@RequestMapping("/order")
public class OrderController {
@RequestMapping(value="/model", method = RequestMethod.POST)
public @ResponseBody OrderModel post(@RequestBody final OrderModel model) {
System.out.println(model.getItemsList());
System.out.println(model.getTotalPrice());
return model;
}
}
}
OrderModel.java
public class OrderModel implements Serializable {
private static final long serialVersionUID = 1L;
String custumerName;
int totalPrice;
Items[] itemsList;
public void setTotalPrice(int totalPrice) {
this.totalPrice = totalPrice;
}
public void setItemsList(Items[] itemsList) {
this.itemsList = itemsList;
}
public int getTotalPrice() {
return totalPrice;
}
public Items[] getItemsList() {
return itemsList;
}
public void setCustumerName(String custumerName) {
this.custumerName = custumerName;
}
public String getCustumerName() {
return custumerName;
}
public OrderModel(String custumerName, int totalPrice, Items[] itemsList) {
this.custumerName = custumerName;
this.totalPrice = totalPrice;
this.itemsList = itemsList;
}
}
Items.java 是一个简单的POJO类,用于映射hibernate实体,仅包含String和long类型字段。
因此,当我尝试访问index.html
时,它不会发回任何响应。在浏览器的控制台中,我得到了以下内容:
发布http://localhost:8080/shop/main/order/model 415()
HTTP状态415 -
输入状态报告
消息
description:服务器拒绝了此请求,因为请求实体 是所请求的资源不支持的格式 要求的方法。
答案 0 :(得分:0)
您要发送 ItemsList ,但在您的课程中, itemsList 。
答案 1 :(得分:0)
我从你的代码中发现的两件事。 1.您的应用程序中需要一个messageConverter。
要添加消息转换器,您需要在pom中添加这两个依赖项。检查适用于您的正确版本。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
2。在dispature-servlet.xml或您正在使用的任何mvc配置文件中添加以下bean。
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</list>
</property>
</bean>
在此之后,您将无法获得415,因为您的应用程序将找到正确的消息转换器。
您的OrderModel实体缺少默认构造函数,一旦您执行上述2个步骤,它将会出错。所以添加一个默认的构造函数。
public OrderModel() { }