Was besser ist, geben Sie "ModelAndView" oder "String" auf dem spring3-Controller zurück

114

Die Art der Rückgabe von 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;
}

Die Art der Rückgabe 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";
}

Diese funktionieren gleich. Welcher Weg ist besser? und was ist der Unterschied?

Gentlejo
quelle

Antworten:

129

Es gibt keinen besseren Weg. Beide sind vollkommen gültig. Welche Sie verwenden, hängt davon ab, welche besser zu Ihrer Anwendung passt - mit Spring können Sie dies so oder so tun.

Historisch gesehen stammen die beiden Ansätze aus verschiedenen Versionen von Spring. Der ModelAndViewAnsatz war der primäre Weg, um sowohl Modell- als auch Ansichtsinformationen von einem Controller in Pre-Spring 2.0 zurückzugeben. Jetzt können Sie den ModelParameter und den StringRückgabewert kombinieren , aber der alte Ansatz ist weiterhin gültig.

Skaffman
quelle
8
Daher ist der String-Ansatz der neue.
Akshayb
1
@skaffman Kannst du erklären, ob es einen Unterschied in der Art und Weise gibt, wie Spring es verarbeitet, wie das Voranstellen eines Kontextpfads usw.
Keerthivasan
Bitte schauen Sie ( stackoverflow.com/questions/37410839/… ). Während ich ModelAndView benutze, habe ich dieses Problem bekommen
Vishnu KR
15

Ich möchte mir auch 2 Cent hinzufügen. Der zweite Ansatz ist eher auf Konventionen ausgerichtet, dh der Entwickler erwähnt explizit seine Ansicht, impliziert jedoch, dass die Rückgabezeichenfolge der Ansichtsname ist. Also weniger Codierung, lesbar und Standard. Viel besser als früher mit ModelAndView

M Sach
quelle