@RequestParam用来处理application/x-www-form-urlencoded编码(HTTP协议请求头中不指定Content-Type默认就是application/x-www-form-urlencoded)。@RequestParam可以接受简单类型的属性,也可以接受对象类型的属性,实质就是将Request.getParameter()中的键值对Map利用Spring的转化机制ConversionService配置,转化成参数接受对象或者字段。@RequestParam在GET请求中是QueryString的形式,POST请求BodyData的值都会被Servlet接受并转化为Request.getParameter()参数集中。@RequestParam在POST请求指定Content-Type为application/json;charset=UTF-8时会出现400错误。@RequestParam不能使用@RequestParam JSONObject params接受参数,否则会出现500错误。@RequestParam前端不能使用JSON.stringify()格式化参数,可以使用axios中的QS代替:QS.stringify()。@RequestBody用来处理HTTPEntity(HTTP实体,HttpEntity实体即可以使流也可以使字符串形式)传递过来的数据,一般用于处理非application/x-www-form-urlencoded编码。@RequestBody并不适用,否则参数会乱码导致400错误。@RequestBody时,通过HTTPEntity传递参数,必须要在HTTP请求头设置Content-Type为application/json;chatset=UTF-8,否则会出现415错误,SpringMVC通过使用HandlerAdapter配置HTTPMessageConverter来解析HTTPEntity中的数据,然后绑定到Bean上。@RequestBody时,前端必须使用JSON.stringify()格式化为JSON字符串数据。| 注解 | 支持类型 | 支持的请求类型 | 支持的Content-Type请求头类型 |
|---|---|---|---|
| @PathVariable | URL | GET | ALL |
| @RequestParam | URL | GET | ALL |
| @RequestParam | Body | ALL | application/form-data, application/x-form-www-urlencoded |
| @RequestBody | Body | ALL | aplication/json |
原文:https://blog.51cto.com/xvjunjie/2538787