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


115

返却方法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";
}

これらは同じように機能します。どちらが良い方法ですか?違いは何ですか?

回答:


129

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

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


8
したがって、文字列アプローチは新しいものです。
akshayb 2013年

1
@skaffmanコンテキストパスを追加するなど、Springの処理方法に違いがあるかどうかを説明できますか?
Keerthivasan

見てください(stackoverflow.com/questions/37410839/…)。ModelAndViewを使用しているときにこの問題が発生しました
Vishnu KR

15

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.