Що краще, поверніть “ModelAndView” або “String” на контролері spring3


115

Шлях повернення 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";
}

Ці ж роботи. який кращий спосіб? і в чому різниця?

Відповіді:


129

Немає кращого способу. Обидва цілком дійсні. Який із них ви вирішите використовувати, залежить, який краще підходить вашій програмі - Spring дозволяє вам це робити в будь-якому випадку.

Історично два підходи виходять із різних версій Весни. Цей ModelAndViewпідхід був основним способом повернення як моделі, так і перегляду інформації з контролера в перед-Spring 2.0. Тепер ви можете комбінувати Modelпараметр і Stringповернене значення, але старий підхід все ще діє.


8
Отже, струнний підхід є новим.
акшайб

1
@skaffman Чи можете ви пояснити, чи є якась різниця у способі весняного оброблення, як попередній контекстний шлях тощо?
Keerthivasan

будь ласка, подивіться ( stackoverflow.com/questions/37410839/… ). під час використання ModelAndView у мене виникла ця проблема
Vishnu KR

15

Я також хотів би додати мені 2 копійки. Другий підхід більше орієнтований на конвенцію, тобто розробник чітко згадує, що є його думкою, але його неявним, що зворотним рядком є ​​ім'я перегляду. Так менше кодування, читабельності та стандартності. Набагато краще, ніж старший спосіб з ModelAndView

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.