没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
2页
Java性能调优本专栏将介绍Java应用程序的优化方法,分别从设计模式、JVM虚拟机、代码层面、架构设计等多方面结合实用样例技巧帮助学员理解理论知识,快速掌握优化技巧 问题描述 :axios post 请求或者get请求后接收不到参数 后端接收设置: @RequestParam @RequestBody设置的原因 由于spring的RequestParam注解接收的参数是来自于requestHeader中,即请求头,也就是在url中,格式为xxx?username=123&password=456,而RequestBody注解接收的参数则是来自于requestBody中,即请求体中。
资源推荐
资源详情
资源评论
1456
周排名
5804
总排名
60
万
+
访问
等级
1227
粉丝
231
获赞
154
评论
925
收藏
axios 发 post 请求,后端接收不到参数的详细解决方案
十年呵护
7259
收藏
6
分类专栏:
SpringCloud
文章标签:
axios @RequestBody @RequestParam
2018-11-05 11:39:10
版权
问题描述
:
axios post
请求或者
get
请求后接收不到参数
后端接收设置:
@RequestParam @RequestBody
设置的原因
由于
spring
的
RequestParam
注解接收的参数是来自于
requestHeader
中,即请求头,也就是在
url
中,格式为
xxx?
username=123&password=456
,而
RequestBody
注解接收的参数则是来自于
requestBody
中,即请求体中。
---------------------------------------------------------------------------------------
前端用
axios
发送请求
:
Content-Type
默认是
application/json;charset=UTF-8
而服务器是
'Content-Type': 'application/x-www-form-urlencoded'
原理剖析在最后
后端 解决方案:
前端解决方案
https://blog.csdn.net/csdn_yudong/article/details/79668655
一:
如果为
get
请求时,后台接收参数的注解应该为
RequestParam
,如果为
post
请求时,则后台接收参数的注解就是为
RequestBody
。附上
两个例子,截图如下:
get
请求
@RequestMapping(value = "/anaData")
public String selectOrderInfo(@RequestParam("method") String method, @RequestParam Map<String,Object> params) {
LOG.debug(TextUtils.format("/***
数据
分析模块,統計查詢
通用方法
{0}**/", method));
return analysisClientService.selectOrderInfo(method,params);
}
post
请求
@PostMapping(value = "/center")
public String requestApi(@RequestBody Map<String, Object> params){
loger.debug(TextUtils.format("
调用开始
------"));
return apiCenterClientService.requestApi(params);
}
二、复杂参数形式
未完待续。。。。。。。
tips
:如果参数 有HttpServletRequest需要 注入可以用下面方式
在
Controller
中注入了
HttpServletRequest
,形式如下所示:
@RestController
public class AutowiredRequestController {
@Autowired
private HttpServletRequest request;
}
不会有线程安全问题!
Controller
层中所注入的
HttpServletReuqest
的实现类为
JDK
动态代理生成的一个代理类,从
Request
中获取值的时
候是从
ThreadLocal
中得到的对象中的值。
----------------------------------------------------------------------
未处理部分
-----------------------------------------
@RequestParam
用来处理
Content-Type:
为
application/x-www-form-urlencoded
编码的内容。提交方式为
get
或
post
。(
Http
协议中,如果不指定
Content-
Type
,则默认传递的参数就是
application/x-www-form-urlencoded
类型)
RequestParam
实质是将
Request.getParameter()
中的
Key-Value
参数
Map
利用
Spring
的转化机制
ConversionService
配置,转化成参数接
收对象或字段。
get
方式中
query String
的值,和
post
方式中
body data
的值都会被
Servlet
接受到并转化到
Request.getParameter()
参数集中,所
以
@RequestParam
可以获取的到
@RequestBody
处理
HttpEntity
传递过来的数据,一般用来处理非
Content-Type: application/x-www-form-urlencoded
编码格式的数据。
GET
请求中,因为没有
HttpEntity
,所以
@RequestBody
并不适用。
POST
请求中,通过
HttpEntity
传递的参数,必须要在请求头中声明数据的类型
Content-Type
,
SpringMVC
通过使用
HandlerAdapter
配置
的
HttpMessageConverters
来解析
HttpEntity
中的数据,然后绑定到相应的
bean
上。
@RequestBody
用于post请求,不能用于get请求
这里涉及到使用
@RequestBody
接收不同的对象
1.
创建一个新的
entity
,将两个
entity
都进去。这是最简单的,但是不够
“
优雅
”
。
2.
用
Map<String, Object>
接受
request body
,自己反序列化到各个
entity
中。
3.
类似方法
2
,不过更为
generic
,实现自己的
HandlerMethodArgumentResolver
。
当前台界面使用
GET
或
POST
方式提交数据时,数据编码格式由请求头的
ContentType
指定。分为以下几种情况:
1. application/x-www-form-urlencoded
,这种情况的数据
@RequestParam
、
@ModelAttribute
可以处理,
@RequestBody
也可以处理。
2. multipart/form-data
,
@RequestBody
不能处理这种格式的数据。(
form
表单里面有文件上传时,必须要指定
enctype
属性值
为
multipart/form-data
,意思是以二进制流的形式传输文件。)
3. application/json
、
application/xml
等格式的数据,必须使用
@RequestBody
来处理。
Java
性能调优
本专栏将介绍
Java
应用程序的优化方法,分别从设计模式、
JVM
虚拟机、代码层面、架构设计等多方面结合实用样例技巧帮助学员理解理论知识
,
快速掌握优
化技巧
十年呵护
资源评论
fb19801101
- 粉丝: 13
- 资源: 42
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功