SpringMvc--@RequestBody和@RequestParam注解以及不加注解接收参数的区别

1.@RequestParam

主要用来接收GET请求拼接在URL后的参数,或者是POST传递,且Content-type为x-www-form-urlencoded方式。
因为不管是GET方式还是用x-www-form-urlencoded方式传递,参数都是以键值对方式拼接的,然后经过URLencoded编码,传递给服务端。
@RequestParam只能接收简单参数类型,复杂的参数类型要用@RequestBody来接收,或者不加注解来接收。



2.@RequestBody

使用@RequestBody该注解,前端请求只能为POST,因为该注解是从请求体中获得对象的。且请求头中的Content-type一般为application/json方式。所以使用该注解能够接收JSON格式的数据,并且能把接收到的JSON数据绑定到JAVA对象中。复杂对象包括List,实体类,Map对象等。
       在用该注解的时候有两个注意事项:
         1. 一个方法中只能有一个@RequestBody注解,但是@RequestBody注解可以和@RequestParam注解一起使用,而且@RequestParam注解一个方法中可以有多个。
         2. @RequestBody注解的参数类型可以是复杂对象类。



3.不加注解接收

不加注解接收参数,参数类型可以为简单类型,也可以为复杂类型(JAVA对象等,前端传递的参数会和类中的属性名对应并且绑定)。也就是两种类型都可接收。而且GET请求和POST请求也都能接收到参数。但是POST请求时,和@RequestParam注解一样,Content-type只能为x-www-form-urlencoded。不加注解可以接收复杂对象,但是不能接收Map类型的对象。

你可能感兴趣的:(SpringMvc,java,spring,ajax,json,post)