spring mvc controller映射方式不同

时间:2016-04-01 10:30:07

标签: java spring spring-mvc

这两种@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;
    }

1 个答案:

答案 0 :(得分:1)

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

Model作为参数+ String查看返回值优点:

  • 更容易设置模型属性(如果您在意,可以减少Demeter违规法)
  • 更容易返回视图值(只需返回一个字符串)

ModelAndView作为返回值& param pros:

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

另见: