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

时间:2016-04-14 11:47:49

标签: java spring spring-mvc

我的一个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错误。但是我做了一些非常奇怪的观察。我将在下面列出我的发现。

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

  2. 如果我将模型属性更改为上述控制器中的User类对象,则它可以正常工作并创建User类的新实例,即使该属性在提交的表单中不存在。

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

  4. 奇怪的是,如果我删除其他一些工作正常的类,那么产生错误的类将完美地运行而没有任何问题。此外,如果我创建一个只有少数类的新应用程序,那么相同的代码也适用于在我的原始应用程序中产生错误的类。

  5. 基于上述观察,如果我们有更多的实体类,那么模型属性会抛出错误吗?每次都是同一个类吗?

0 个答案:

没有答案