Quale è meglio, restituire “ModelAndView” o “String” sul controller spring3

La via del ritorno 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; } 

La via del ritorno 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"; } 

Funzionano allo stesso modo. qual è il modo migliore? e qual è la differenza?

Non c’è modo migliore. Entrambi sono perfettamente validi. Quale sceglierai di utilizzare dipende da quale si adatta meglio alla tua applicazione – Spring ti consente di farlo in entrambi i modi.

Storicamente, i due approcci provengono da diverse versioni di Spring. L’approccio ModelAndView era il modo principale per restituire sia il modello che le informazioni di visualizzazione da un controller in Pre-Spring 2.0. Ora è ansible combinare il parametro Model e il valore di restituzione String , ma il vecchio approccio è ancora valido.

Vorrei aggiungermi anche 2 centesimi. Il secondo approccio è più orientato alla convenzione, in quanto lo sviluppatore fa esplicitamente riferimento a ciò che è il suo punto di vista, ma è implicito che la stringa di restituzione è il nome della vista. Quindi meno codice, leggibile e standard. Molto meglio di vecchio modo con ModelAndView