2011-08-24 11 views
101

Droga powrotna ModelAndViewKtóry jest lepszy, zwrot "ModelAndView" lub "String" na kontrolerze spring3

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

Sposób powrotnej 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"; 
} 

Działają one same. który jest lepszy sposób? i jaka jest różnica?

Odpowiedz

120

Nie ma lepszego sposobu. Oba są całkowicie prawidłowe. Wybór, którego chcesz użyć, zależy od tego, który z nich pasuje do twojej aplikacji - Spring pozwala to zrobić w dowolny sposób.

Historycznie oba podejścia pochodzą z różnych wersji Spring. Podejście ModelAndView było podstawowym sposobem zwracania informacji o modelu i widoku z kontrolera w wersji przed wiosną 2.0. Teraz możesz połączyć parametr Model i wartość zwracaną String, ale stare podejście jest nadal poprawne.

+5

Dlatego podejście String jest nowe. – akshayb

+1

@skaffman Czy możesz wyjaśnić, czy są jakieś różnice w sposobie, w jaki przetwarza się Spring, jak przedrostek contextpath itp. – Keerthivasan

+0

proszę spojrzeć (http://stackoverflow.com/questions/37410839/spring-mvc-controller-working-but-not -popraszanie-podanej-adresu-url-it-is/37412537 # 37412537). podczas korzystania z ModelAndView mam ten problem –

14

Chciałbym dodać także 2 centy. Drugie podejście jest bardziej ukierunkowane na konwencję, tzn. Programista wyraźnie wspomina o tym, jaki jest jego widok, ale niejawnie, że zwracany ciąg jest nazwą widoku. Więc mniej kodowania, czytelny i standardowy. Znacznie lepiej niż starszym sposobem z ModelAndView

Powiązane problemy