2010-07-26 27 views
13

Sto modificando un progetto web che utilizza Spring e ho bisogno di aggiungere alcune delle annotazioni di Spring. Due di quelli che sto aggiungendo sono @RequestBody e @RequestParam. Ho girato un po 'e ho trovato this, ma ancora non capisco completamente come usare queste annotazioni. Qualcuno potrebbe fornire un esempio? esempioapprendimento Spring's @RequestBody e @RequestParam

+3

Esistono buoni esempi nella documentazione, sia per ['@ RequestMapping'] (http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html# mvc-ann-requestparam) e ['@ RequestBody'] (http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-requestbody) – skaffman

risposta

15

regolatore:

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

@RequestBody: corpo variabile conterrà il corpo della richiesta HTTP

@RequestParam: baz variabile conterrà il valore del parametro di richiesta baz

+0

Un metodo può avere più parametri @RequestBody? – Sri

+8

No, non può, c'è solo un corpo HTTP, quindi può esserci una sola variabile RequestBody – lanoxx

2

@RequestParam i parametri annotati vengono collegati a un servlet specifico richiedere parametri. I valori dei parametri vengono convertiti nel tipo di argomento del metodo dichiarato. Questa annotazione indica che un parametro metodo deve essere associato a un parametro di richiesta Web.

Per esempio richiesta angolare per la primavera RequestParam (s) sarebbe simile che:

$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 parametri annotati vengono collegati al corpo della richiesta HTTP. I valori dei parametri vengono convertiti nel tipo di argomento del metodo dichiarato utilizzando HttpMessageConverters. Questa annotazione indica che un parametro del metodo deve essere associato al corpo della richiesta web.

Per esempio richiesta angolare per la primavera RequestBody sarebbe simile a quello:

$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) {... 

Spero che questo aiuti.

Problemi correlati