Kann ein Federregler beide Arten von Anforderungen bearbeiten?
1) http://localhost:8080/submit/id/ID123432?logout=true
2) http://localhost:8080/submit/id/ID123432?name=sam&password=543432
Wenn ich einen einzelnen Controller dieser Art definiere:
@RequestMapping (value = "/submit/id/{id}", method = RequestMethod.GET,
produces="text/xml")
public String showLoginWindow(@PathVariable("id") String id,
@RequestParam(value = "logout", required = false) String logout,
@RequestParam("name") String username,
@RequestParam("password") String password,
@ModelAttribute("submitModel") SubmitModel model,
BindingResult errors) throws LoginException {...}
Die HTTP-Anfrage mit "Logout" wird nicht akzeptiert.
Wenn ich zwei Controller definiere, um jede Anforderung separat zu behandeln, beschwert sich Spring mit der Ausnahme "Es gibt bereits eine 'Controller'-Bean-Methode ... zugeordnet".
java
spring
spring-mvc
luksmir
quelle
quelle
Antworten:
Sie müssen geben
required = false
fürname
undpassword
auch Anforderungsparameter. Das liegt daran, dass, wenn Sie nur denlogout
Parameter angeben, dieser tatsächlich erwartetname
undpassword
auch weiterhin obligatorisch ist.Es hat funktioniert, als Sie gerade gaben
name
undpassword
weillogout
es dankrequired = false
bereits gegebener nicht ein obligatorischer Parameter warlogout
.quelle
Ab diesem
Spring 4.1.1
Zeitpunkt haben Sie jetzt die volle Unterstützung von Java 8Optional
( Originalticket) ). In Ihrem Beispiel werden beide Anforderungen über Ihren einzelnen Mapping-Endpunktrequired=false
gesendet, solange Sie für Ihre 3 Parameter Abmeldung, Name, Passwort durch Optional ersetzen :quelle
Erstellen Sie 2 Methoden, die die Fälle behandeln. Sie können die
@RequestMapping
Anmerkung anweisen , bestimmte Parameter beim Zuordnen der Anforderung zu berücksichtigen. Auf diese Weise können Sie dies in zwei Methoden aufteilen.quelle
!myParam style expressions indicate that the * specified parameter is not supposed to be present in the request.
versuchen.handleLogin
andere zu verwenden, es wird eine Ausnahme geben, die besagt, dass keine Zuordnung gefunden werden kann.