我从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))来解决这个问题,但收效不佳。 也许有人遇到这个或类似的问题,可以给我一些提示,我该怎么办?
致谢
答案 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);
}
我不知道这是否是一个很好的解决方案,但就我的目的而言,现在已经足够了。
致谢