当前位置: 首页 > news >正文

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串

http://www.lryc.cn/news/61406.html

相关文章:

  • 注释和关键字
  • 第一次参加CSDN周赛,这体验很难说···
  • 8.DRF组件之认证、权限
  • 初识Tkinter弹窗
  • 设计模式之责任链模式(C++)
  • 音游判定原理详解——从触摸屏幕到判定音符【Project SEKAI攻略】
  • 【论文阅读】Self-Paced Boost Learning for Classification
  • 通过CSIG—走进合合信息探讨生成式AI及文档图像处理的前景和价值
  • 流程图拖拽视觉编程--概述
  • 深度学习中的卷积神经网络
  • vue3的介绍和两种创建方式(cli和vite)
  • camunda工作流user task如何使用
  • 三元运算符
  • Vue3 Element-plus el-menu无限级菜单组件封装
  • ( “树” 之 BST) 669. 修剪二叉搜索树 ——【Leetcode每日一题】
  • 【C语言】浅涉结构体(声明、定义、类型、定义及初始化、成员访问及传参)
  • 设计模式-结构型模式之装饰模式
  • 【Chatgpt4 教学】 NLP(自然语言处理)第九课 朴素贝叶斯分类器的工作原理 机器学习算法
  • 基于html+css的图片展示17
  • Jupyter Notebook小知识
  • redis原理及进化之路
  • ai智能写作助手-ai自动写作软件
  • redis持久化
  • Vue项目基于driverjs实现新用户导航
  • 自编码器简单介绍—使用PyTorch库实现一个简单的自编码器,并使用MNIST数据集进行训练和测试
  • redis单机最大并发量
  • MTLAB绘图
  • 自媒体必备素材库,免费、商用,赶紧马住~
  • ESP32设备驱动-BMP388气压传感器驱动
  • 攻防世界-Reversing-x64Elf-100