springMVC中接口参数解析的过程分析之content-type=application/json

上一篇博客分析了在content-type默认情况下的参数解析。今天再看一下指定content-type为application/json的情况是怎样的。和之前默认的相比,在下面这个地方出现了差别。request.getParameterNames()在默认content-type=application/x-www-form-urlencoded; charset=UTF-8的时候可以获取到值,但是在content-type=application/json的情况下获取不到值。通过查询资料,tomcat对content-type=application/x-www-form-urlencoded进行了特殊处理,Content-Type不是application/x-www-form-urlencoded的POST请求是不会读取请求体数据和进行相应的参数处理的,即不会解析表单数据来放到request parameter map中。所以通过request.getParameter(name)是获取不到的。因此在没有后端没有@ResponseBody这个注解的时候是解析不到参数的。

 

接下来我们看添加了@ResponseBody之后为什么又解析到参数呢。在下面这个位置的时候,情况出现了变化,如果在springmvc的方法参数前面加了@ResponseBody之后,resolver的实现类将和没有加这个注解不同。没有加注解的时候这个resolver是ServletModelAttributeMethodProcessor的实例,加了注解之后resolver是RequestResponseBodyMethod的实例。

 因此在RequestResponseBodyMethod类中的resolveArgument方法中进行解析参数,

 

 从这个readWithMessageConverters方法中可以看到,这是通过io流来读取

 

转载于:https://www.cnblogs.com/007tangtao/p/9281378.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值