Mana yang lebih baik, kembalikan "ModelAndView" atau "String" pada pengontrol spring3


115

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

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

Ini bekerja sama. mana cara yang lebih baik? dan apa bedanya?

Jawaban:


129

Tidak ada cara yang lebih baik. Keduanya benar-benar valid. Yang mana yang Anda pilih untuk digunakan tergantung mana yang lebih sesuai dengan aplikasi Anda - Spring memungkinkan Anda melakukannya dengan cara apa pun.

Secara historis, kedua pendekatan tersebut berasal dari versi Spring yang berbeda. The ModelAndViewPendekatan adalah cara utama untuk kembali kedua model dan melihat informasi dari controller di pra-musim semi 2.0. Sekarang Anda dapat menggabungkan Modelparameter dan nilai yang Stringdikembalikan, tetapi pendekatan lama masih valid.


8
Oleh karena itu pendekatan String adalah yang baru.
akshayb

1
@skaffman Bisakah Anda menjelaskan jika ada perbedaan dalam cara Spring memprosesnya seperti prepending contextpath dll ..
Keerthivasan

silakan lihat ( stackoverflow.com/questions/37410839/… ). saat menggunakan ModelAndView saya mendapat masalah ini
Wisnu KR

15

Saya ingin menambahkan saya 2 sen juga. Pendekatan kedua lebih ke arah konvensi yaitu pengembang tidak secara eksplisit menyebutkan apa pandangannya tetapi secara implisit bahwa string yang dikembalikan adalah nama tampilan. Jadi lebih sedikit pengkodean, mudah dibaca dan standar. Jauh lebih baik daripada cara lama dengan ModelAndView

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.