使用 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:需要最简单的表单处理、绑定和验证示例

如何在 Spring MVC 中针对 HTML 和 JSON 请求以不同方式处理异常

如何在 Spring MVC 中针对 HTML 和 JSON 请求以不同方式处理异常

Spring MVC 处理JSON 使用HttpMessageConveter

spring3.2.4 mvc 表单处理Date类型