2011-08-24 7 views
101

El camino de regreso ModelAndView¿Qué es mejor, el regreso "ModelAndView" o "cadena" en el controlador 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; 
} 

El camino de la cadena de retorno

@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 trabajos misma. ¿Cuál es la mejor manera? y que es la diferencia?

Respuesta

120

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 Model y el valor de retorno String, pero el enfoque anterior sigue siendo válido.

+5

Por lo tanto, el enfoque String es el nuevo. – akshayb

+1

@skaffman ¿Puede explicar si hay alguna diferencia en la forma en que Spring lo procesa como anteponer el contexto, etc. – Keerthivasan

+0

, mire (http://stackoverflow.com/questions/37410839/spring-mvc-controller-working-but-not -creating-the-specified-response-url-it-is/37412537 # 37412537). mientras uso ModelAndView tengo este problema –

14

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 codificación, legible y estándar. Mucho mejor que la forma anterior con ModelAndView

Cuestiones relacionadas