Java SpringMVC-400状态错误中@ModelAttribute工作中的奇怪行为

Java SpringMVC-400状态错误中@ModelAttribute工作中的奇怪行为,java,spring,spring-mvc,Java,Spring,Spring Mvc,我的一个Spring MVC应用程序中发生了一个奇怪的行为。注释@ModelAttribute适用于某些实体类,但在用于其他一些类时会引发400错误。请参见下面的示例代码 抛出错误的控制器代码 @RequestMapping(value = "/courses/add", method = RequestMethod.GET) public String addCoursePage(WebRequest request, ModelMap model) { Course course =

我的一个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方法中,实体课程的model属性抛出400错误。但我有一些非常奇怪的观察。我将在下面列出我的发现

  • 这种类似的代码适用于某些实体类,而对某些类则会抛出错误。无论控制器代码如何,这都会在整个应用程序中发生

  • 如果我在上面的控制器中将model属性更改为User class object,它将正常工作,并且创建一个新的User class实例,即使提交的表单中不存在该属性

  • 在每次表单提交中,属于同一组少数类的模型属性都会抛出错误,而另一组类则可以正常工作。在整个应用程序中,此工作和错误实体类集每次都是相同的

  • 更奇怪的是,如果我删除一些其他工作正常的类,那么产生错误的类将可以完美地工作,而没有任何问题。另外,如果我创建了一个只有几个类的新应用程序,那么同样的代码对于在我的原始应用程序中产生错误的类来说也是完美的


  • 根据以上观察,如果我们有更多的实体类,并且每次都有相同的实体类,那么model attribute是否会抛出错误?

    看看这个答案:根据答案,即使我删除@ModelAttribute注释,如果我只是使用课程,那么它也会有相同的错误。这适用于所有抛出错误的类。