Ce qui est mieux, renvoie «ModelAndView» ou «String» sur le contrôleur spring3


115

La manière de retourner 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;
}

La manière de retourner 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";
}

Celles-ci fonctionnent de la même manière. quel est le meilleur moyen? et quelle est la différence?

Réponses:


129

Il n'y a pas de meilleur moyen. Les deux sont parfaitement valables. Celui que vous choisissez d'utiliser dépend de celui qui convient le mieux à votre application - Spring vous permet de le faire dans les deux sens.

Historiquement, les deux approches proviennent de versions différentes de Spring. L' ModelAndViewapproche était le principal moyen de renvoyer à la fois des informations sur le modèle et la vue à partir d'un contrôleur avant le printemps 2.0. Vous pouvez maintenant combiner le Modelparamètre et la Stringvaleur de retour, mais l'ancienne approche est toujours valide.


8
Par conséquent, l'approche String est la nouvelle.
akshayb

1
@skaffman Pouvez-vous expliquer s'il y a une différence dans la façon dont Spring le traite comme le préfixe de chemin de contexte, etc.
Keerthivasan

veuillez regarder ( stackoverflow.com/questions/37410839/… ). en utilisant ModelAndView, j'ai eu ce problème
Vishnu KR

15

Je voudrais également m'ajouter 2 cents. La deuxième approche est plus orientée vers les conventions, c'est-à-dire que le développeur mentionne explicitement quelle est sa vue, mais il est implicite que la chaîne de retour est le nom de la vue. Donc moins de codage, lisible et standard. Bien mieux que l'ancienne avec ModelAndView

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.