Spring @Controller分离GET和POST映射

时间:2011-05-23 15:34:48

标签: java spring spring-mvc

我正在使用Spring MVC和注释配置。我有一个用于处理HTTP GET调用的控制器类:

@Controller
@RequestMapping("/form")
public class FormController {

    @RequestMapping(value = "/{table}/{identifier}/edit", method = RequestMethod.GET)
    public ModelAndView getEditView(ModelMap map, @PathVariable String table, @PathVariable Object identifier) {
        //generate the view for this record
    }

并且用于处理表单的Controller在该URL上提交

@Controller
@RequestMapping("/form")
public class FormSaveController {

    @RequestMapping(value = "/{table}/{identifier}/edit", method = RequestMethod.POST)
    public ModelAndView saveView(WebRequest request, @PathVariable String table, @PathVariable Object identifier) {
        //save the updated values and redirect to view
    }

当我尝试启动我的容器时,spring抱怨

Caused by: java.lang.IllegalStateException: Cannot map handler 'FormSaveController' to URL path [/form/{table}/{identifier}/edit]: There is already handler of type [class com.company.web.FormController] mapped.

这似乎表明我正在尝试做的事情在Spring中不受支持。我试图将用于生成表单的控制器与保存表单的控制器分开的原因是因为我使用Springs @ExceptionHandler来处理发生的任何运行时异常,并且我想处理异常以便以不同方式显示视图而不是保存记录的例外。

是否有不同的方法来处理我想要做的事情(对特定类型的请求使用Springs @ExceptionHandler注释?)

2 个答案:

答案 0 :(得分:3)

您是否尝试过使用同一课程?我认为那会有用。如果您希望使用ExceptionHandler,请尝试HandlerExceptionResolver

答案 1 :(得分:2)

  

我试图将用于生成表单的控制器与保存表单的控制器分开的原因是因为我使用Springs @ExceptionHandler来处理发生的任何运行时异常,并且我想处理显示的异常视图与保存记录的异常

不同

我认为您的视图模板引擎会抛出不同类型层次结构的异常,而不是在数据存储区中保存记录时遇到的异常。将这些方法放在同一个类中可能最容易,然后通过一种方式映射视图引擎类型的异常和另一种DB异常来解决@ExceptionResolver问题。