web-dev-qa-db-fra.com

Quel est le meilleur, renvoyer "ModelAndView" ou "String" sur le contrôleur spring3

La voie du retour 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;
}

Le chemin du retour 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";
}

Ceux-ci fonctionnent même. quel est le meilleur moyen? et quelle est la différence?

111
gentlejo

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

Historiquement, les deux approches proviennent de versions différentes de Spring. L'approche ModelAndView était le moyen principal de renvoyer à la fois les informations de modèle et d'affichage d'un contrôleur dans les versions antérieures à Spring 2.0. Vous pouvez maintenant combiner le paramètre Model et la valeur de retour String, mais l'ancienne approche est toujours valide.

127
skaffman

Je voudrais ajouter moi 2 cents aussi. La seconde approche est plus orientée convention. Le développeur mentionne explicitement son point de vue, mais implique implicitement que la chaîne de retour est le nom de la vue. Donc, moins de codage, lisible et standard. Beaucoup mieux que l'ancienne méthode avec ModelAndView

15
M Sach