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).
http://docs.spring.io/spring/docs/4.1.x/spring-framework-reference/html/mvc.html#mvc-ann-return-types –
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 –