Что лучше, верните «ModelAndView» или «String» на контроллере spring3 - PullRequest
111 голосов
/ 24 августа 2011

Способ возврата ModelAndView

@RequestMapping(value = "/list", method = RequestMethod.GET)
public ModelAndView list(
    @UserAuth UserAuth user, 
    ModelAndView mav) {

    if (!user.isAuthenticated()) {
        mav.setViewName("redirect:http://www.test.com/login.jsp");
        return mav;
    }

    mav.setViewName("list");
    mav.addObject("articles", listService.getLists());

    return mav;
}

Способ возврата String

@RequestMapping(value = "/list", method = RequestMethod.GET)
public String list(
    @UserAuth UserAuth user, 
    Model model) {

    if (!user.isAuthenticated()) {
        return "redirect:http://www.test.com/login.jsp";
    }

    model.addAttribute("articles", listService.getLists());

    return "list";
}

Они работают одинаково.какой способ лучше?а в чем разница?

Ответы [ 2 ]

127 голосов
/ 24 августа 2011

Нет лучшего способа.Оба совершенно действительны.То, какой из них вы выберете, зависит от того, какое из них лучше подходит для вашего приложения - Spring позволяет вам делать это в любом случае.

Исторически два подхода исходили из разных версий Spring.Подход ModelAndView был основным способом получения информации о модели и виде из контроллера в версии до Spring 2.0.Теперь вы можете комбинировать параметр Model и возвращаемое значение String, но старый подход все еще действителен.

15 голосов
/ 29 марта 2015

Я бы тоже хотел добавить 2 цента.Второй подход в большей степени ориентирован на соглашение, то есть разработчик явно упоминает, что является его представлением, но подразумевается, что возвращаемая строка является именем представления.Так меньше кодирования, удобочитаемы и стандартны.Гораздо лучше, чем старый способ с ModelAndView

...