Ajax 用SpringMVC处理JSON和表单数据请求

Ajax 用SpringMVC处理JSON和表单数据请求,ajax,spring,rest,spring-mvc,Ajax,Spring,Rest,Spring Mvc,我正在开发简单的SpringMVC应用程序,我喜欢SpringREST的新特性。我希望使用相同的方法来处理常规表单和JSON数据。然而,这似乎有点棘手。例如,方法 public @ResponseBody String process(@RequestBody Bean bean); public@ResponseBody字符串进程(@RequestBody Bean); 将用于JSON请求(内容类型:application/JSON),以及 public@ResponseBody字符串进程(B

我正在开发简单的SpringMVC应用程序,我喜欢SpringREST的新特性。我希望使用相同的方法来处理常规表单和JSON数据。然而,这似乎有点棘手。例如,方法

public @ResponseBody String process(@RequestBody Bean bean); public@ResponseBody字符串进程(@RequestBody Bean); 将用于JSON请求(内容类型:application/JSON),以及

public@ResponseBody字符串进程(Bean); 将请求与内容类型匹配:application/x-www-form-urlencoded


显然,这些方法的内容几乎相同,所以我更愿意避免这种重复。使用Jersey,可以使用
@消费
注释,但我不知道如何使用Spring。

首先,上面的声明不会编译,因为您有重复的签名

顺便说一句,
@Consumes
不会有帮助,因为它只指定方法可以处理的内容类型

在spring中,可以使用指定内容类型

@RequestMapping(headers="Content-Type=application/json")

只需为控制器类添加@RestController注释。

这些方法的返回类型是什么?我认为您需要在@ResponseBody注释之后指定一个“type”,或者至少指定void?哦,很抱歉,错过了返回类型。事实上,它们是无关紧要的。看来,Spring是按参数匹配请求的。@Consumes是为Jersey设计的,很抱歉误解了。感谢您对编译的评论,但这些签名仅用于演示目的。我真正需要的是不要为JSON和表单数据处理使用不同的方法,这在Spring MVS中似乎是不可能的。@rsvato在Jersey中是如何实现的?我已经展示了消费的等价物——它是“头”。但在泽西岛怎么办?您可以指定该方法处理这两种内容类型(在spring中也可以),然后?然后适当的MessageBodyReader实现将解码请求。所以这只是一个供应商的问题(在泽西岛)。你的意思是不可能用一种方法处理多个内容类型?@rsvato-我在问你怎么做。我对jax-rs做的很少。啊,我明白了。我用@Consumes({“application/json”、“application/xml”、“application/form”})来注释这个方法,这意味着这个方法可以处理所有三种类型的请求。
@RequestMapping(headers="Content-Type=application/json")