Что лучше, верните "ModelAndView" или "String" на контроллере spring3

Обратный путь 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;
}

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

@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";
}

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

Ответ 1

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

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

Ответ 2

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