Co jest lepsze, zwróć „ModelAndView” lub „String” na sterowniku spring3

115

Sposób zwrotu 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;
}

Sposób zwrotu 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";
}

Te działają tak samo. który jest lepszy sposób? a jaka jest różnica?

gentlejo
źródło

Odpowiedzi:

129

Nie ma lepszego sposobu. Oba są całkowicie prawidłowe. To, który wybierzesz, zależy od tego, który bardziej pasuje do Twojej aplikacji - Spring pozwala to zrobić w dowolny sposób.

Historycznie rzecz biorąc, te dwa podejścia pochodzą z różnych wersji Spring. ModelAndViewPodejście było podstawowym sposobem powrotu zarówno informacje o modelu i widoku z kontrolera w pre-Spring 2.0. Teraz możesz połączyć Modelparametr i Stringwartość zwracaną, ale stare podejście jest nadal aktualne.

skaffman
źródło
8
Dlatego nowością jest podejście typu String.
akshayb
1
@skaffman Czy możesz wyjaśnić, czy są jakieś różnice w sposobie, w jaki Spring przetwarza to, np. poprzedzając ścieżkę kontekstu itp.
Keerthivasan
proszę spojrzeć ( stackoverflow.com/questions/37410839/ ... ). podczas korzystania z ModelAndView mam ten problem
Vishnu KR
15

Chciałbym też dodać 2 centy. Drugie podejście jest bardziej zorientowane na konwencję, tj. Programista wyraźnie wspomina, jaki jest jego widok, ale niejawnie wskazuje, że ciąg zwrotny jest nazwą widoku. Więc mniej kodowania, czytelności i standardu. Znacznie lepiej niż starszy sposób z ModelAndView

M Sach
źródło