2017-01-25 2 views
2

Wenn ich einige Codes geschrieben mit Spring MVC in einem alten Projekt lese, merke ich, dass der Autor zwei ähnliche Verfahren unter Verwendung von Wert zu übergeben wie folgt an der Steuerung:Übergeben Sie Wert an den Controller in Spring MVC, was ist der Unterschied?

@RequestMapping(value="/print") 
    public String PrintInfo(@RequestParam("name") String name,@RequestParam("age") int age) { 
....... 
} 

Oder

@RequestMapping(value="/print") 
    public String PrintInfo(String name,int age) { 
....... 
} 

sie beide gut arbeiten. Der Unterschied ist, ob es das @RequestParam verwendet.

Was ist der Hauptunterschied zwischen ihnen? Welcher ist besser und warum?

+0

klingt wie du hast schon die Antwort! –

Antwort

3

Das hört sich im Grunde so an, als würden Sie fragen "Was ist ein RequestParam und warum sollte ich es benutzen?"

Mit der RequestParam können Sie das Argument des Methodenparameters an den Webanforderungsparameter binden. Ohne weitere Attribute teilt Ihr Beispiel Spring mit, dass ein Parameter name und age erforderlich ist und Spring diese zwei Parameter mit der eingehenden Anforderung verknüpfen kann. Sie können required-false optional eingestellt, na ja, das Argument, optional:

public String PrintInfo(@RequestParam("name", required = false) String name, 
         @RequestParam("age") int age) { 

Als äußerst nützliche Funktion, können Sie auch ein defaultValue im Fall liefern können Sie einen leeren Wert aus der Anfrage. So können Sie tun:

public String PrintInfo(@RequestParam("name", defaultValue="John Doe") String name, 
         @RequestParam("age") int age) { 

... und Sie werden nie mit einem Nullnamen beschäftigen.

Schließlich macht es auch einige magische Art Konvertierungen, wie zum Beispiel automatisch mit einem Integer Typ. In Ihrem Beispiel hätten Sie folgendes verwenden können:

public String PrintInfo(@RequestParam("name") String name, 
         @RequestParam("age") Integer age) { 

... und Spring hätte es automatisch ohne zusätzliche Arbeit verpackt.

Es gibt nichts an sich falsch mit dem Verlassen der RequestParam Annotation, aber Sie sagen im Wesentlichen nein zu Spring diese Funktionen wie in Ihrem zweiten Fall zu aktivieren.

Abgesehen:

@RequestMapping(value="/print") kann mehr einfach geschrieben werden als @RequestMapping("/print")

1

Wenn der Name des Anforderungsparameter und der Name der Methode Argumente gleich sein wird, dann Frühling Parameter automatisch durch Namen binden . Zum Beispiel haben Sie eingehende GET Anfrage:

http://localhost:8080/print?name=somename&age=30 

und Controller-Methode:

@RequestMapping(value="/print") 
public String PrintInfo(String name,int age) { 
    ... 
} 

In diesem Fall brauchen Sie nicht @RequestParam Anmerkung für Parameter angeben. Weil Namen in Anfrage und Namen von Methoden args gleich sind.


Aber wenn Namen nicht Gleichen sind, dann müssen Sie die Korrespondenz von Namen mit @RequestParam explizit angeben. Zum Beispiel:

http://localhost:8080/print?user_name=somename&user_age=30 

und Controller-Methode:

@RequestMapping(value="/print") 
public String PrintInfo(@RequestParam("user_name") String userName, @RequestParam("user_age")int userAge) { 
    ... 
} 

So @RequestParam benötigt, um den Frühling machen Bindungen richtig zu helfen, wenn Anfrage param Namen und Methode args Namen unterschiedlich sind.


Acutally, viele Entwickler immer @RequestParam verwenden, selbst wenn Namen gleich sind. Zum Beispiel leer @RequestParam:

@RequestMapping(value="/print") 
public String PrintInfo(@RequestParam() String name, @RequestParam() int age) { 
    ... 
} 

Da diese Anmerkung dieses Argument zeigt stammt aus Anforderung und macht den Code klar und lesbar.

Verwandte Themen