无法将json字符串绑定到Spring MVC中的控制器中的对象?

时间:2016-06-25 09:09:29

标签: java jquery ajax spring spring-mvc

我正在尝试创建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>

4 个答案:

答案 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后,问题就解决了。 感谢。