1. ホーム
  2. spring-mvc

[解決済み] Spring3コントローラで "ModelAndView "と "String "を返すのはどっちがいい?

2022-05-15 17:15:20

質問

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

これらは同じように動作します。どちらが良い方法でしょうか?

どのように解決するのですか?

どちらが良いということはありません。 どちらも完全に有効です。どちらを選ぶかは、あなたのアプリケーションにどちらが適しているかによります。Springではどちらの方法でも可能です。

歴史的には、この2つのアプローチはSpringの異なるバージョンに由来しています。その ModelAndView アプローチは、Spring 2.0 より前のバージョンではコントローラからモデルとビューの両方の情報を返す主要な方法でした。現在では Model パラメータと String の返り値として使用することができますが、古いアプローチもまだ有効です。