Cuál es mejor, devuelva "ModelAndView" o "String" en el controlador spring3


115

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

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

Estos funcionan igual. cual es mejor manera? y cual es la diferencia?

Respuestas:


129

No hay mejor manera. Ambos son perfectamente válidos. El que elija utilizar 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 ModelAndViewenfoque fue la forma principal de devolver tanto la información del modelo como de la vista desde un controlador en versiones anteriores a Spring 2.0. Ahora puede combinar el Modelparámetro y el Stringvalor de retorno, pero el enfoque anterior sigue siendo válido.


8
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 la ruta de contexto, etc.?
Keerthivasan

por favor mire ( stackoverflow.com/questions/37410839/… ). mientras usaba ModelAndView tengo este problema
Vishnu KR

15

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.