Lo cual es mejor, devuelve “ModelAndView” o “String” en el controlador spring3

La forma de retorno 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; } 

El camino de regreso Cadena

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

Estos funcionan igual. ¿Cuál es la mejor manera? y que es la diferencia?

No hay mejor manera. Ambos son perfectamente válidos. El que elija usar depende de cuál se adapte mejor a su aplicación: Spring le permite hacerlo de cualquier manera.

Históricamente, los dos enfoques provienen de diferentes versiones de Spring. El enfoque ModelAndView fue la forma principal de devolver tanto el modelo como la información de vista de un controlador en pre-Spring 2.0. Ahora puede combinar el parámetro de Model y el valor de retorno de String , pero el enfoque anterior sigue siendo válido.

Me gustaría agregarme 2 centavos también. El segundo enfoque es más orientado a la convención, es decir, el desarrollador menciona explícitamente cuál es su punto de vista, pero está implícito que la cadena de retorno es el nombre de la vista. Por lo tanto, menos encoding, legible y estándar. Mucho mejor que la forma anterior con ModelAndView