GET请求时,参数会以 url string 的形式进行传递,即?后的字符串则为其请求参数,并以&作为分隔符。参数直接反映在url里面,形式为key1=value1&key2=value2形式。
POST请求时,若Content-Type为application/x-www-form-urlencoded,参数是在请求体中,即参数会以FormData的形式进行传递,不会显示出现在请求url中,也是以key1=value1&key2=value2的形式在请求体中。
POST请求,若Content-Type为application/json,则参数会以Request Payload的形式进行传递(数据格式为JSON),不会显示出现在请求url中。
主要用来接收GET请求拼接在url后的参数,或者是POST传递且Content-type为x-www-form-urlencoded方式。因为不管是GET方式还是用x-www-form-urlencoded方式传递,参数都是以键值对方式拼接的,然后经过URLencoded编码,传递给服务端。
POST表单数据正常来说和GET方法一样是可以用request.getParameter(字段名)来获得数据的。但由于POST请求原生代码中字符串的要求,使用Content-Type为application/json的时候是获取不到的。
@RequestParam 底层是通过request.getParameter方式获得参数的,也就是说,@RequestParam 和 request.getParameter是同一回事。
主要用来接收GET请求拼接在url后的参数,或者是POST传递且Content-type为x-www-form-urlencoded方式。因为不管是GET方式还是用x-www-form-urlencoded方式传递,参数都是以键值对方式拼接的,然后经过URLencoded编码,传递给服务端。
@RequestParam 只能接收简单参数类型,复杂的参数类型要用 @RequestBody 来接收,或者不加注解来接收。
在GET请求中,不能使用@RequestBody。因为往GET请求里加body是不符合规范的。
使用 @RequestBody 该注解,前端请求只能为 POST,因为该注解是从请求体中获得对象的。 且请求头中的Content-type一般为application/json方式。所以使用该注解能够接收 JSON 格式的数据,并且能把接收到的 JSON 数据绑定到 JAVA 对象中。复杂对象包括实体类,List,Map对象等。
该注解常用来处理Content-Type不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等。
@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。 在ajax请求往往传的都是Json对象,用JSON.stringify(data)的方式就能将对象变成字符串。
在POST请求,可以使用@RequestBody和@RequestParam,但是如果使用@RequestBody,对于参数转化的配置必须统一。可以使用多个@RequestParam获取数据,@RequestBody不可以只能一个。
一个方法中只能有一个@RequestBody注解,但是@RequestBody注解可以和@RequestParam注解一起使用,而且@RequestParam注解一个方法中可以有多个。
@RequestBody注解的参数类型可以是复杂对象类。
不加注解接收参数,参数类型可以为简单类型,也可以为复杂类型(JAVA对象等,前端传递的参数会和类中的属性名对应并且绑定)。也就是两种类型都可接收。
GET请求和POST请求也都能接收到参数。但是POST请求时,和@RequestParam注解一样,Content-type只能为x-www-form-urlencoded。
不加注解可以接收复杂对象,但是不能接收Map类型的对象。