2010-07-26 15 views
13

Ich bearbeite ein Web-Projekt, das Spring verwendet, und ich muss einige Anmerkungen von Spring hinzufügen. Zwei der hinzugefügten sind @RequestBody und @RequestParam. Ich habe ein wenig herum gestochert und this gefunden, aber ich verstehe immer noch nicht vollständig, wie man diese Anmerkungen benutzt. Kann jemand ein Beispiel geben?Lernen Spring @RequestBody und @RequestParam

+3

Es gibt gute Beispiele in der Dokumentation für beide ['@ RequestMapping'] (http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html# mvc-ann-requestparam) und ['@ RequestBody'] (http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-requestbody) – skaffman

Antwort

15

-Controller Beispiel:

@Controller 
class FooController { 
    @RequestMapping("...") 
    void bar(@RequestBody String body, @RequestParam("baz") baz) { 
     //method body 
    } 
} 

@RequestBody: variable Körper den Körper der HTTP-Anforderung enthalten

@RequestParam: variable Baz wird den Wert des Anforderungsparameter Baz halten

+0

Kann eine Methode mehrere @RequestBody-Parameter haben? – Sri

+8

Nein, es kann nicht, es gibt nur einen HTTP-Body, daher kann es nur eine RequestBody-Variable geben – lanoxx

2

@RequestParam annotierte Parameter werden mit einem bestimmten Servlet verknüpft Anfrageparameter. Parameterwerte werden in den deklarierten Methodenargumenttyp konvertiert. Diese Annotation gibt an, dass ein Methodenparameter an einen Webanforderungsparameter gebunden werden soll.

Zum Beispiel Angular Anfrage für Frühling RequestParam (n) so aussehen würde:

$http.post('http://localhost:7777/scan/l/register', {params: {"username": $scope.username, "password": $scope.password, "auth": true}}). 
        success(function (data, status, headers, config) { 
         ... 
        }) 

@RequestMapping(method = RequestMethod.POST, produces = "application/json", value = "/register") 
public Map<String, String> register(Model uiModel, 
            @RequestParam String username, @RequestParam String password, boolean auth, 
            HttpServletRequest httpServletRequest) {... 

@RequestBody kommentierte Parameter erhalten auf der HTTP-Anforderung Körper verbunden sind. Parameterwerte werden mithilfe von HttpMessageConverters in den deklarierten Methodenargumenttyp konvertiert. Diese Annotation gibt an, dass ein Methodenparameter an den Hauptteil der Webanforderung gebunden werden soll.

Zum Beispiel Angular Anfrage für Frühling RequestBody würde so aussehen:

$scope.user = { 
      username: "foo", 
      auth: true, 
      password: "bar" 
     };  
$http.post('http://localhost:7777/scan/l/register', $scope.user). 
         success(function (data, status, headers, config) { 
          ... 
         }) 

@RequestMapping(method = RequestMethod.POST, produces = "application/json", value = "/register") 
public Map<String, String> register(Model uiModel, 
            @RequestBody User user, 
            HttpServletRequest httpServletRequest) {... 

Hoffnung, das hilft.

Verwandte Themen