栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

具有多个@RequestBody的Spring MVC控制器

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

具有多个@RequestBody的Spring MVC控制器

Spring使用一个称为的接口

HandlerMethodArgumentResolver
来决定将哪些参数传递给您的处理程序方法。对于带有注释的参数
@RequestBody
,请使用名为的类
RequestResponseBodyMethodProcessor
。此类基本上在一组
HttpMessageConverter
对象中查找可以读取
content-type
请求的对象并可以转换为指定类型的对象。如果找到一个,则将
HttpServletRequest
as
的主体传递
InputStream
给该
HttpMessageConverter
对象。

在这种情况下,您可能会发现一些JSON解串器正在工作。很可能(看到

IOException
您得到的)消耗流然后关闭它。

因此,实际上,这种做事方式并非直接可行。

一种解决方案是制作一个

Filter
,将封装
HttpServletRequest
在您自己的实现中,该实现对进行缓冲,
InputStream
以使其可重复使用/重新读取所需次数。但是同样,Spring可能会采用从身体反序列化的规则,而这并不是您真正想要的。在这种情况下,你可以创建自己的
Annotation
,并
HandlerMethodArgumentResolver
通过它来与您的配置应用程序注册。然后,您可以控制从请求主体反序列化事物的方式。

另一个解决方案是两者结合起来

MyObjectDto
,并
messageBody
成一个DTO,如果是有道理的,以数据模型(和spring反序列化过程)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/421863.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号