【问题标题】:Spring MVC Ajax Post @ModelAttribute (Send object json to method controller)Spring MVC Ajax Post @ModelAttribute(将对象 json 发送到方法控制器)
【发布时间】:2018-09-23 06:22:00
【问题描述】:

我在从 javascript 向方法控制器发送 JSON 对象时遇到问题。下面是一段javascript的sn-p代码:

$.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)),但没有好的结果。 也许有人有这个或类似的问题,可以给我一个提示我该怎么办?

问候

【问题讨论】:

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


    【解决方案1】:

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

    Javascript sn-p 代码:

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

    方法控制器sn-p代码:

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

    我不知道这是否是好的解决方案之一,但对于我的目的而言,现在就足够了。

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      相关资源
      最近更新 更多