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?

softjo
sumber

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.

skaffman
sumber
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

M Sach
sumber