使用 Spring MVC 处理 JSON 和表单数据请求
Posted
技术标签:
【中文标题】使用 Spring MVC 处理 JSON 和表单数据请求【英文标题】:Handling JSON and form data request with Spring MVC 【发布时间】:2011-06-27 23:05:08 【问题描述】:我正在开发简单的 Spring-MVC 应用程序,我喜欢新的 Spring REST 功能。我想使用相同的方法来处理常规表单和 JSON 数据。然而,这似乎有点棘手。比如方法
公共@ResponseBody 字符串过程(@RequestBody Bean bean);适用于 JSON 请求(内容类型:application/json),并且
public @ResponseBody 字符串处理(Bean bean);将请求内容类型匹配:application/x-www-form-urlencoded。
这些方法显然会有几乎相同的内容,所以我宁愿避免这种重复。使用 Jersey 可以使用 @Consumes
注释,但我不知道如何使用 Spring。
【问题讨论】:
这些方法的返回类型是什么?我认为您需要在 @ResponseBody 注释之后指定一个“类型”,或者至少是 void? 哦,抱歉错过了返回类型。事实上,它们无关紧要。看来,Spring 通过参数匹配请求。 【参考方案1】:首先,上面的声明不会编译,因为你有重复的签名。
顺便说一句,我认为@Consumes
不会有帮助,因为它只指定该方法可以处理的内容类型。
在 spring 中,您可以使用
指定内容类型@RequestMapping(headers="Content-Type=application/json")
【讨论】:
@Consumes 代表泽西岛,误会请见谅。感谢您对编译的评论,但这些签名仅用于演示目的。我真正需要的不是对 JSON 和表单数据处理有不同的方法,这对于 Spring MVS 来说似乎是不可能的。 @rsvato 在泽西岛怎么可能?我已经展示了 Consums 的等价物——它是“标题”。但它在泽西岛如何运作?您可以指定该方法处理两种内容类型(春天也可以),然后呢? 然后适当的 MessageBodyReader 实现将解码请求。所以这只是提供者的问题(在泽西岛)。你的意思是不可能用一种方法处理多种内容类型? @rsvato - 我在问你会怎么做。我对 jax-rs 所做的很少。 啊,我明白了。好吧,我用 @Consumes("application/json", "application/xml", "application/form") 注释方法,这意味着该方法可以处理所有三种类型的请求。【参考方案2】:只需为控制器类添加@RestController 注解。
【讨论】:
以上是关于使用 Spring MVC 处理 JSON 和表单数据请求的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Spring Security / Spring MVC 处理表单登录
如何在 Spring MVC 中针对 HTML 和 JSON 请求以不同方式处理异常
如何在 Spring MVC 中针对 HTML 和 JSON 请求以不同方式处理异常