您现在的位置是:首页 >其他 >Spring MVC 接收 json 和返回 json (14)网站首页其他

Spring MVC 接收 json 和返回 json (14)

chen_yao_kerr 2023-05-28 00:00:03
简介Spring MVC 接收 json 和返回 json (14)

目录

总入口

测试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串

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。