Spring MVC Ajax Post @ModelAttribute(将对象json发送到方法控制器)

时间:2018-09-23 06:22:01

标签: json ajax spring post model-view-controller

我从javascript将JSON对象发送到方法控制器时遇到问题。以下是javascript的代码段:

$.getJSON("/api/tasks/" + id)
.done(function( task ) {
  $.post("/tasks/update", {
      id: task.id,
      version: task.version,
      name: task.name,
      description: task.description,
      priority: task.priority,
      finished: task.finished,
      category: task.category
    });
});

应该接收json对象的方法控制器

@PostMapping(path = "update")
public String processUpdateForm(@ModelAttribute @Valid Task task, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
      return TASK_EDIT_FORM;
    }

    taskService.updateTask(task);

    return redirectTo("/tasks");

}

如果我想发送最后一个属性类别:task.category,它是嵌套对象,问题就开始了,我得到以下错误:

org.springframework.beans.InvalidPropertyException: Invalid property 'category[id]' of bean class [pl.java.learning.todolist.domain.task.Task]: Property referenced in indexed property path 'category[id]' is neither an array nor a List nor a Map; returned value was [Category(name=null)]

我注意到该方法无法处理我认为应该为category.id的category [id]? 我花了很多天(例如RequestBody,不同结构的JSON(JSON.parse或JSON.stringify))来解决这个问题,但收效不佳。 也许有人遇到这个或类似的问题,可以给我一些提示,我该怎么办?

致谢

1 个答案:

答案 0 :(得分:0)

我找到了解决我问题的答案,也许将来有人会对此类似,所以我将解决方案留在下面:

JavaScript代码段:

$.getJSON("/api/tasks/" + id)
.done(function(task) {
  $.ajax("/api/tasks", {
    data: JSON.stringify(task),
    contentType: 'application/json',
    type: 'POST'
  });
});

方法控制器代码段:

@PostMapping
  public void addTask(@RequestBody Task task) {
    taskService.addTask(task);
  }

我不知道这是否是一个很好的解决方案,但就我的目的而言,现在已经足够了。

致谢