Wenn Sie eine Rückgabetyp in der Methodensignatur erwähnen abgesehen von void
, am Ende des Verfahrens die Ausführung sollte das Verfahren einen Wert zurück.
Ihr Code entspricht dieser Regel nicht.
Lassen Sie uns sehen, was in Ihrem Code passiert.
if (user != null) {
// (1) inside if block
} else
return new ModelAndView("oops", "user", user);
Wenn user
null ist, dann wird Zustand false
sein, so dass die Ausführung der Steuerung zu anderen Block übergeben werden, die die Instanz von ModelAndView("oops", "user", user);
so ohne Probleme zurück.
Wenn user
nicht null ist, dann wird die Bedingung true
sein, so dass die Ausführungssteuerung wird in die inside of (1) if block
In der Innenseite (1) Wenn der Block das Programm übergeben werden, wird das Protokoll schreiben und dann die Ausführungssteuerung wird übergeben an 2nd if
Zustand.
Nun wollen wir die zweite Bedingung sehen,
if (user.getUsername().equals("jon")){
return new ModelAndView("echo", "user", user);
}
hier, wenn Benutzernamen „jon“ gleich, dann wird die Bedingung wahr sein. Dann kommt die Ausführungskontrolle inside of (2) if block
. Hier führt die Programmsteuerung new ModelAndView("echo", "user", user);
aus und gibt die Instanz zurück. Keine Probleme.
Hier kommt der Tricking-Punkt, wenn der Benutzername nicht gleich "jon" ist, dann, da kein anderes vorhanden ist, kommt die Ausführungskontrolle aus dem (1) if-Block und erreicht das Ende der Methode.
Da es keine Anweisungen gibt, die entweder die Instanz von ModelAndView oder null zurückliefern, wird der Compiler einen Fehler ausgeben.
Also, ich schlage vor, Sie zu behandeln, was zurückgeben, wenn der Benutzername nicht gleich "jon" wie unten ist. Und fügen Sie nicht zurück null; am Ende, da es einige Laufzeitausnahmen verursachen kann;
public ModelAndView postLoginPage(@ModelAttribute("user") User user, ModelMap model,
HttpServletRequest req, HttpServletResponse res) {
if (user != null) {
logger.log(Level.INFO, "\n\n [*][*][*][*][*] user not null ");
if (user.getUsername().equals("jon")){
return new ModelAndView("echo", "user", user);
} else{ // to avoid compilation error
return new ModelAndView("user is not jon", "user", user);
}
} else
return new ModelAndView("oops", "user", user);
}
Was würde diese Methode zurückgeben, wenn getUsername() nicht gleich "jon" ist? – Eran
Ich habe den "offensichtlichen" Kompilierfehler aufgrund eines fehlenden ')' behoben. Ich denke nicht * die Frage war darüber. – Bathsheba
Der Fehler ist ziemlich explizit. Es besteht die Möglichkeit, nichts zurückzugeben. PS: Dieser Code könnte eine NPE – AxelH