我的一个Spring MVC应用程序中发生了一种奇怪的行为。注释@ModelAttribute适用于某些实体类,但在用于其他一些类时会抛出400错误。请参阅下面的示例代码。
我的控制器代码正在抛出错误。
@RequestMapping(value = "/courses/add", method = RequestMethod.GET)
public String addCoursePage(WebRequest request, ModelMap model) {
Course course = new Course();
model.addAttribute("course", course);
return "addCourse";
}
@RequestMapping(value= "/courses/save", method = RequestMethod.POST)
public String saveCourse(@Valid @ModelAttribute("course") Course course, BindingResult result){
if (result.hasErrors()) {
return "redirect:/courses/list";
}
this.courseService.addCourse(course);
return "redirect:/courses/list";
}
@RequestMapping(value = "/courses/list", method = RequestMethod.GET)
public String coursesListPage(ModelMap model) {
model.addAttribute("coursesList", this.courseService.listAllCourses());
return "courseList";
}
在上面的代码中,在saveCourse方法中,实体Course的模型属性抛出400错误。但是我做了一些非常奇怪的观察。我将在下面列出我的发现。
这个类似的代码适用于某些实体类,而它会为某些类抛出错误。无论控制器代码如何,这都会在整个应用程序中发生。
如果我将模型属性更改为上述控制器中的User类对象,则它可以正常工作并创建User类的新实例,即使该属性在提交的表单中不存在。
在每个表单提交中,属于同一组几个类的模型属性会抛出错误,而另一组类可以正常工作。在整个应用程序中,每次设置的工作和错误实体类都是相同的。
奇怪的是,如果我删除其他一些工作正常的类,那么产生错误的类将完美地运行而没有任何问题。此外,如果我创建一个只有少数类的新应用程序,那么相同的代码也适用于在我的原始应用程序中产生错误的类。
基于上述观察,如果我们有更多的实体类,那么模型属性会抛出错误吗?每次都是同一个类吗?