Hangisi daha iyi, spring3 denetleyicide "ModelAndView" veya "String" i döndürün


115

ModelAndView'a dönüş yolu

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

String dönüşünün yolu

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

Bunlar aynı şekilde çalışır. hangisi daha iyi bir yol? ve fark nedir?

Yanıtlar:


129

Daha iyi bir yol yok. Her ikisi de tamamen geçerlidir. Hangisini kullanmayı seçeceğiniz, hangisinin uygulamanıza daha uygun olduğuna bağlıdır - Spring, her iki şekilde de yapmanıza olanak tanır.

Tarihsel olarak, iki yaklaşım Bahar'ın farklı versiyonlarından gelir. ModelAndViewYaklaşım ön Spring 2.0 olan bir kontrolörün her iki modeli ve görüntü bilgisini geri primer şekilde oldu. Artık Modelparametre ve Stringdönüş değerini birleştirebilirsiniz , ancak eski yaklaşım hala geçerlidir.


8
Dolayısıyla String yaklaşımı yenidir.
akshayb

1
@skaffman Bahar işleminde bağlam yolunu önceden bekletme gibi bir farklılık olup olmadığını açıklayabilir misiniz?
Keerthivasan

lütfen bakın ( stackoverflow.com/questions/37410839/… ). ModelAndView kullanırken bu sorunu yaşadım
Vishnu KR

15

Ben de 2 sent eklemek istiyorum. İkinci yaklaşım daha çok konvansiyona yöneliktir, yani geliştirici kendi görüşünün ne olduğunu açıkça belirtir, ancak bunun üstü kapalı olarak geri dönüş dizesinin görünüm adıdır. Böylece daha az kodlama, okunabilir ve standart. ModelAndView ile eski yöntemden çok daha iyi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.