9 Stimmen

Spring MVC - Request Mapping, zwei Urls mit zwei verschiedenen Parametern

Ist es in Spring möglich, eine Methode mit zwei verschiedenen URLs mit unterschiedlichen Parametern für jede Methode zu haben?

Nachstehend ein Pseudocode

@RequestMethod(URL1-param1, URL2-param2)
public void handleAction(@ModelAttribute("A") A a, ...) {
}

Gleichzeitig wird ULR1 in einem anderen Controller abgebildet als

@RequestMethod(URL1)
public void handleAction1(@ModelAttribute("A") A a, ...) {
}

14voto

Bozho Punkte 570413

Update: Es scheint, dass Ihre Frage völlig anders lautet.

Nein, Sie können nicht dieselbe Url mit verschiedenen Parametern in verschiedenen Controllern verwenden. Und es macht auch nicht viel Sinn - die URL spezifiziert eine Ressource oder Aktion, und sie kann nicht genau gleich in zwei Controllern benannt werden (die unterschiedliche Verhaltensweisen bezeichnen).

Sie haben zwei Möglichkeiten:

  • unterschiedliche URLs verwenden
  • eine Methode in einem Misc-Controller verwenden, die je nach Anforderungsparameter an die verschiedenen Controller (die injiziert werden) weitergeleitet wird.

Ursprüngliche Antwort:

Nein. Aber Sie können zwei Methoden haben, die das Gleiche tun:

@RequestMethod("/foo")
public void foo(@ModelAttribute("A") A a) {
    foobar(a, null);
}

@RequestMethod("/bar")
public void bar(@ModelAttribute("B") B b) {
    foobar(null, b);
}

Wenn ich nicht richtig verstanden habe, und Sie wollen das gleiche ModelAttribute, dann einfach:

@RequestMapping(value={"/foo", "/bar"})

Und schließlich - wenn Sie verschiedene Anfrageparameter benötigen, können Sie @RequestParam(required=false) um alle möglichen Parameter aufzulisten.

2voto

Erhan Bagdemir Punkte 5131

Können Sie mehrere Zuordnungen für Ihren Handler wie folgt angeben

@RequestMapping(value={"", "/", "welcome"})
public void handleAction(@ModelAttribute("A") A a, ...) { }

Wenn Sie jedoch für jedes Mapping unterschiedliche Parameter verwenden wollen, müssen Sie Ihre Methode extrahieren.

0voto

svlada Punkte 3106

Etwa so

@RequestMapping(value={"URL1"}, method=RequestMethod.POST)
public String handleSubmit(@ModelAttribute("A") A command, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    return helperSubmit();
}

@RequestMapping(value={"URL2"}, method=RequestMethod.POST)
public String handleSubmit(@ModelAttribute("A") A command, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    return helperSubmit();
}

private helperSubmit() {
  return "redirect:" + someUrl;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X