Spring MVC Ajax Post @ModelAttribute (Отправить объект json в контроллер метода) - PullRequest
0 голосов
/ 23 сентября 2018

У меня проблема с отправкой объекта JSON в контроллер метода из JavaScript.Ниже приведен фрагмент кода 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)]

Я заметил, что метод не может обрабатывать категорию [id], которая, я полагаю, должна быть category.id?Я потратил на эту проблему несколько дней с большим количеством комбинаций (например, RequestBody, другой структурой JSON (JSON.parse или JSON.stringify)), но без хороших результатов.Может быть, у кого-то была такая или похожая проблема, и можете дать мне подсказку, что мне делать?

С уважением

1 Ответ

0 голосов
/ 23 сентября 2018

Я нашел ответ на мою проблему, возможно, в будущем у кого-то будет похожее, поэтому я оставлю решение ниже:

Код фрагмента 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);
  }

Я не знаю, является ли это одним из хороших решений, но для моих целей пока достаточно.

С уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...