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?

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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.