我正在尝试创建Spring MVC应用程序并在单击提交按钮时发送Ajax调用。
以下是控制器方法:
@ResponseBody
@RequestMapping(value = "/addTask" , method=RequestMethod.POST)
public String addTask(@ModelAttribute(value="task") Task task, BindingResult result, Model model){
String returnText = null;
System.out.println(task.getDescription()); // printing null
return "success" ;
}
但我将Task
对象中的所有属性设为 null 。
但是我能够在控制器中接收json作为String并通过Gson api转换为Object。
@ResponseBody
@RequestMapping(value = "/addTask" , method=RequestMethod.POST)
public String addTask(@RequestBody String task){
String returnText = null;
Gson gson = new Gson();
Task rr = gson.fromJson(task, Task.class);
taskList.add(rr);
return "success" ;
}
以下是ajax代码:
function doAjaxPost() {
var id = $('#id').val();
var desc = $('#description').val();
var dueDate = $('#dueDate').val();
var obj = { "id" : id, "description" : desc, "dueDate": dueDate};
console.log(obj)
$.ajax({
type : "POST",
contentType : "application/json",
url : "/spring/addTask",
data : JSON.stringify(obj),
dataType : 'json',
timeout : 100000,
success: function(response){
$('#description').val('');
$('#dueDate').val('');
$('#id').val('');
},
error: function(e){
alert('Error: ' + e);
console.log(e);
}
});
}
我已经在pom.xml中添加了以下2依赖项。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.6.3</version>
</dependency>
答案 0 :(得分:0)
在发出POST请求时从Ajax调用中删除行{{1}}。它将在模型中设置值并100%工作。如果这有助于你,请告诉我。
答案 1 :(得分:0)
如果要使用表单创建模型属性,请尝试var str = $("#myForm").serialize();
。否则,在ajax的数据部分中直接发送obj.serialize()
。
答案 2 :(得分:0)
尝试将Consumes = {&#34; application / json&#34;}添加到@RequestMapping注释中。如果Jackson依赖项在类路径上,则应执行自动转换。之后你不再需要@ModelAttribute注释。
@ResponseBody
@RequestMapping(value = "/addTask" , method=RequestMethod.POST, consumes = { "application/json" })
public String addTask(Task task, BindingResult result, Model model){
...
}
答案 3 :(得分:0)
为什么JSON无法绑定到对象,因为我在POJPO类中不是implement Serializable
。
我实施Serializable
后,问题就解决了。
感谢。