目录
总入口
测试case
源码分析
1. 针对@RequestBody的参数解析
2. 针对 @ResponseBody 的返回值处理
总入口
通过上一篇Spring MVC 参数解析(13)_chen_yao_kerr的博客-CSDN博客的说明,相信大家对Sping MVC的参数解析有了一定的了解,下面对我们开发中最常用的传JSON以及前端接受JSON进行分析。
参数解析 以及 返回值的入口,上一篇我们说过可以快速找到的。 下面进入总入口:
测试case
业务方法:
@RequestMapping(value = "/queryUser3", method = RequestMethod.POST)
public @ResponseBody ZgGoods queryUser3(@NotNull @RequestBody ZgGoods g){
g.setGoodName("update name");
return g;
}
POJO:
package com.xiangxue.jack.pojo;
public class ZgGoods {
private String goodCode;
private String goodName;
private Integer count;
public String getGoodCode() {
return goodCode;
}
public void setGoodCode(String goodCode) {
this.goodCode = goodCode == null ? null : goodCode.trim();
}
public String getGoodName() {
return goodName;
}
public void setGoodName(String goodName) {
this.goodName = goodName == null ? null : goodName.trim();
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
}
发送的JSON以及接收的JSON:
源码分析
1. 针对@RequestBody的参数解析
其实,就是就是读取流信息,然后按照 对象的方法获取实际的参数类型,将读取的信息封装成实际的参数信息。具体步骤如下:
首先快速锁定参数解析的最关键代码处,我们发现 @RequestBody注解使用的参数解析器为 RequestResponseBodyMethodProcessor。 这个解析器既负责参数解析,也负责返回值处理
过度步骤:
解析的核心代码:
最后,就是反射调用业务代码了:
2. 针对 @ResponseBody 的返回值处理
因为JSON的解析 与 返回值处理,使用的是同一个类RequestResponseBodyMethodProcessor,所有debug直接打在处理类的 handleReturnValue方法中
中间过程我就不累赘了,感兴趣的童鞋可以自己读读源码。其实,最终是以流的形式输出的,输出的格式为JSON串