What is difference between @RequestBody and @RequestParam? What is difference between @RequestBody and @RequestParam? spring spring

What is difference between @RequestBody and @RequestParam?


@RequestParam annotated parameters get linked to specific Servlet request parameters. Parameter values are converted to the declared method argument type. This annotation indicates that a method parameter should be bound to a web request parameter.

For example Angular request for Spring RequestParam(s) would look like that:

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

Endpoint with RequestParam:

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

@RequestBody annotated parameters get linked to the HTTP request body. Parameter values are converted to the declared method argument type using HttpMessageConverters. This annotation indicates a method parameter should be bound to the body of the web request.

For example Angular request for Spring RequestBody would look like that:

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

Endpoint with RequestBody:

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

Hope this helps.


@RequestParam makes Spring to map request parameters from the GET/POST request to your method argument.

GET Request

http://testwebaddress.com/getInformation.do?city=Sydney&country=Australiapublic String getCountryFactors(@RequestParam(value = "city") String city,                     @RequestParam(value = "country") String country){ }

POST Request

@RequestBody makes Spring to map entire request to a model class and from there you can retrieve or set values from its getter and setter methods. Check below.

http://testwebaddress.com/getInformation.do

You have JSON data as such coming from the front end and hits your controller class

{   "city": "Sydney",   "country": "Australia"}

Java Code - backend (@RequestBody)

public String getCountryFactors(@RequestBody Country countryFacts)    {        countryFacts.getCity();        countryFacts.getCountry();    }public class Country {    private String city;    private String country;    public String getCity() {        return city;    }    public void setCity(String city) {        this.city = city;    }    public String getCountry() {        return country;    }    public void setCountry(String country) {        this.country = country;    }}


map HTTP request header Content-Type, handle request body.

  • @RequestParamapplication/x-www-form-urlencoded,

  • @RequestBodyapplication/json,

  • @RequestPartmultipart/form-data,