【发布时间】:2017-06-15 06:51:53
【问题描述】:
我正在使用 Spring,以下是我的控制器代码:
@RequestMapping(value = "/campaigns/addTask", method = RequestMethod.POST)
public Campaign addTaskToCampaign(@RequestParam(value = "campaignName")String campaignName,@Valid @RequestBody Task task) {
Campaign campaign = campaignInterface.findByName(campaignName);
if (campaign!=null){
List<String> task_ids;
if (campaign.getTask_ids()==null){
task_ids = new ArrayList<>();
}else{
task_ids= campaign.getTask_ids();
}
Task newTask = taskInterface.save(task);
task_ids.add(newTask.getId());
campaign.setTask_ids(task_ids);
return campaignInterface.save(campaign);
}
return null;
}
我的任务模型在哪里:
@Document(collection = "tasks")
public class Task {
@Id
private String id;
private String name;
private int points;
private List<Question>questions;
private List<String>answers;
...
}
嵌套问题模型为:
public class Question {
private Boolean isText = false;
private String questionText;
}
但是,当作为嵌套 json 发布时,相同的模型会引发 HTTP 400 异常,说 json unreadable 异常,并且它试图将 String questionText 字段解析为布尔值。
这是我发布的内容:
{
"name" : "Test Task 3",
"questions": [{ "questionText":"What is the name you college festival?","isText":true}]
}
而出现的例外是:
{
"timestamp": 1497508476467,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.http.converter.HttpMessageNotReadableException",
"message": "JSON parse error: Can not deserialize value of type boolean from String \"What is the name you college festival?\": only \"true\" or \"false\" recognized; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not deserialize value of type boolean from String \"What is the name you college festival?\": only \"true\" or \"false\" recognized\n at [Source: java.io.PushbackInputStream@6a371c03; line: 3, column: 32] (through reference chain: com.frapp.CBM.prod.model.Task[\"questions\"]->java.util.ArrayList[0]->com.frapp.CBM.prod.model.Question[\"questionText\"])",
"path": "/campaigns/addTask"
}
感谢任何帮助。我已经尝试了几个小时。先感谢您。
【问题讨论】:
-
你尝试重建吗?
-
是的。我从构建菜单进行了重建。我也做了两次 gradle 运行。
-
从解析错误看来,它似乎期待 questionText 的布尔值。请检查服务器代码中 questionText 的数据类型。
-
我觉得你的
questionTextsetter 参数是Boolean类型(复制粘贴错误?) -
我要对我的任何开发人员做的第一条评论是:请您重命名您的布尔值。这是因为 getter 看起来像:
isIsText()。作为一般规则,最好避免以“get”、“set”或“is”开头的字段名称。
标签: java json spring mongodb spring-mvc