Che è meglio, restituire "ModelAndView" o "String" sul controller spring3


115

Il modo di restituire 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;
}

Il modo di restituire 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";
}

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

Risposte:


129

Non c'è modo migliore. Entrambi sono perfettamente validi. Quale scegli di utilizzare dipende da quale si adatta meglio alla tua applicazione: Spring ti consente di farlo in entrambi i casi.

Storicamente, i due approcci provengono da diverse versioni di Spring. L' ModelAndViewapproccio era il modo principale per restituire sia il modello che le informazioni di visualizzazione da un controller in pre-Spring 2.0. Ora puoi combinare il Modelparametro e il Stringvalore restituito, ma il vecchio approccio è ancora valido.


8
Quindi l'approccio String è il nuovo.
akshayb

1
@skaffman Puoi spiegare se ci sono differenze nel modo in cui Spring lo elabora come anteporre contextpath ecc.
Keerthivasan

per favore guarda ( stackoverflow.com/questions/37410839/… ). durante l'utilizzo di ModelAndView ho riscontrato questo problema
Vishnu KR

15

Vorrei aggiungere anche me 2 centesimi. Il secondo approccio è più orientato alle convenzioni, cioè lo sviluppatore menziona esplicitamente qual è il suo punto di vista ma è implicito che la stringa di ritorno sia il nome della vista. Quindi meno codifica, leggibile e standard. Molto meglio del vecchio modo con ModelAndView

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.