web-dev-qa-db-ja.com

どちらが良いですか、spring3コントローラで「ModelAndView」または「String」を返します

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;
}

文字列を返す方法

@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";
}

これらは同じ働きをします。どちらが良い方法ですか?そして違いは何ですか?

111
gentlejo

より良い方法はありません。両方とも完全に有効です。どちらを使用するかは、どちらがアプリケーションに適しているかによって決まります。Springではどちらの方法でも使用できます。

歴史的に、2つのアプローチは異なるバージョンのSpringから来ています。 ModelAndViewアプローチは、Spring 2.0より前のコントローラからモデルとビューの両方の情報を返す主な方法でした。 ModelパラメーターとString戻り値を組み合わせることができるようになりましたが、古いアプローチは引き続き有効です。

127
skaffman

2セントも追加したいと思います。 2番目のアプローチは、コンベンション指向に近いものです。つまり、開発者は自分のビューが何であるかを明示的に言及していますが、返される文字列はビュー名であることを暗黙的に示しています。コーディングが少なく、読みやすく、標準です。 ModelAndViewを使用した従来の方法よりもはるかに優れています

15
M Sach