spring mvc控制器映射不同的方式

Posted

技术标签:

【中文标题】spring mvc控制器映射不同的方式【英文标题】:spring mvc controller mapping different ways 【发布时间】:2016-04-01 10:30:07 【问题描述】:

这两种@RequestMapping有什么区别? (一般情况下,不包括传递给页面和映射页面的参数), 正确的方法是返回模型或页面?

@RequestMapping("/")
    public String index(Model model) 
        model.addAttribute("categories", myService.listGroups());
        return "index";
    

@RequestMapping(value = "/", "/helloworld**", method = RequestMethod.GET)
    public ModelAndView welcomePage() 
        ModelAndView model = new ModelAndView();
        model.addObject("title", "Spring Security Tutorial");
        model.addObject("message", "Welcome Page !");
        model.setViewName("helloworld");
        return model;
    

【问题讨论】:

除了 url,第一个适用于 POST、PUT 等,第二个仅适用于 GET 【参考方案1】:

区别主要在于句法。另请注意,通常将ModelAndView 声明为方法参数,而不是实例化它。

Model as param + String 查看返回值优点:

更容易设置模型属性(如果您关心的话,可以减少违反德米特法则的情况) 更容易返回视图值(只需返回一个字符串)

ModelAndView 作为返回值和参数优点:

将这两者封装在一个对象中,这可以让您在某些情况下更好地组合方法(可能是链处理程序方法?) 允许返回非字符串视图,例如RedirectView(例如,与字符串视图相比,它允许您设置准确的 3** HTTP 响应状态,而无需接触甚至声明 HTTP Servlet 响应参数: Set HTTP status code for redirect when returning a String in a Spring 3 controller)

另见:

When to use ModelAndView vs Model in Spring? Which is better, return "ModelAndView" or "String" on spring3 controller What is the difference between return ModelAndView and return String in Spring MVC?

【讨论】:

以上是关于spring mvc控制器映射不同的方式的主要内容,如果未能解决你的问题,请参考以下文章

Spring mvc 发现不明确的映射。无法映射控制器 bean 方法

Ajax 将“映射”对象传递给 Spring MVC 控制器

如何将 Spring MVC 控制器映射到特定文件夹?

从spring mvc控制器返回一个简单的映射结构到ajax

Spring MVC - 多个提交按钮到表单

Spring MVC - 02 RequestMapping映射请求