2014-09-23 6 views
7

Chcę poznać różne między ModelAndView i String.Jaka jest różnica między zwracaniem ModelAndView i zwracanym łańcuchem w Spring MVC?

@RequestMapping(value="/") 
    public ModelAndView mainPage() { 
     return new ModelAndView("home"); 
} 

a drugi kawałek kodu jest o powrocie String:

@RequestMapping(value="/") 
    public String mainPage() { 
     return "home"; 
} 
+1

http://docs.spring.io/spring/docs/4.1.x/spring-framework-reference/html/mvc.html#mvc-ann-return-types –

+0

Możesz również odnieść się do odpowiedzi poniżej: http://stackoverflow.com/questions/7175509/which-is-better-return-modelandview- or-string-on--spring3-controller –

Odpowiedz

9

Można zwrócić się wielu rzeczy od kontrolera, i wiosna będzie automatycznie próbować wydedukować, co robić stamtąd.

Po zwrocie ModelAndView wszystkie informacje, które muszą zostać przekazane z kontrolera, są w nim osadzone. Bez niespodzianek.

Jeśli zwrócisz łańcuch, to przyjmie on, że jest to nazwa używanego widoku. Zawinie to w obiekcie ModelAndView z ciągiem jako widokiem i istniejącym osadzonym modelem.

Wiosna ma dużo "magii" na typach powrotu, ale także na typach parametrów. To pozwala na pisanie kodu w stylu, który jest bardziej intuicyjny dla Ciebie, czyli dwa następujące przykłady są takie same:

@RequestMapping(value="/") 
public ModelAndView mainPage() { 
    Model m = new Model(); 
    m.put("key", "value"); 
    return new ModelAndView(m,"main"); 
} 

i

@RequestMapping(value="/") 
public String mainPage(Model m) { 
    m.put("key", "value"); 
    return "main"; 
} 

Ten drugi wariant jest trochę mniej gadatliwy i łatwiej testować osobno. Model przekazany będzie pustym modelem (chyba, że ​​przesłany z innego kontrolera).

Powiązane problemy