2016-12-11 3 views
0

Ich beginne gerade Java zu lernen, und dies ist meine erste Frage auf Stack-Überlauf, also bitte mich nicht zu hart urteilen)Java Frühling 4.01 automatische Zuordnung

verwende ich Netbeans 8,02, Glassfish 4.0, JavaEE7, Frühling 4.01. (No Maven. No Hibernate.) (Neues Projekt-> Java Web-> Web Application)

Ich habe "source packages/XController.java" in und für URL localhost: 8080/MyProject/x/y erstellt. htm habe ich diese Arbeit:

@Controller 
public class XController { 
    @RequestMapping("/x/y.htm") 
    public String yAction(ModelMap modelMap) { 
     modelMap.put("printme", "Hello World!"); 
     return "x/y"; 
    } 
} 

ist es möglich, von Anmerkungen zu entfernen, da sie alle die gleiche Regel haben: wenn URL http://localhost:8080/MyProject/a/b ist, würde es automatisch verwenden AController.BAction() und automatisch im Hinblick auf sein WEB-INF/jsp/a/b.jsp?

idealerweise der Aktionscode würde wie folgt aussehen:

public Void yAction() { 
    this.modelMap.put("printme", "Hello World!"); 
} 

und wenn URL http://localhost:8080/MyProject/a/b/hello die entsprechende Methode wie folgt aussehen würde, wäre:

public Void yAction(String msg) { 
    this.modelMap.put("printme", msg); 
} 

Wenn-Controller oder Aktion oder nicht gefunden ansehen oder eine Aktion hat falsche Argumente, dann nur eine Ausnahme, keine weitere Lösung erforderlich.

Also die Frage ist - was ist der richtige Weg, um es mit modernen Spring-Funktionen zu erreichen, aber wenn es nicht möglich ist, dann mit Plain Java?

Es ist möglich, manuell zu tun, zum Beispiel umleiten alle an derselben Adresse, dann URL analysieren, und führen Sie die entsprechenden Controller.Method(), aber das würde nicht gut aussehen)

Antwort

0

Was Sie suchen, ist @PathVariable :

@RequestMapping("/{var1}/{var2}") 
    public String action1(ModelMap modelMap, @PathVariable String var1, @PathVariable String var2, @PathVariable String var3) { 
     modelMap.put("printme", "Hello World!"); 
     return var1+"/"+var2; 
} 

@RequestMapping("/{var1}/{var2}/{var3}") 
    public String action2(ModelMap modelMap, @PathVariable String var1, @PathVariable String var2, @PathVariable String var3) { 
     modelMap.put("printme", var3); 
     return var1+"/"+var2; 
}