【问题标题】:Handling JSON and form data request with Spring MVC使用 Spring MVC 处理 JSON 和表单数据请求
【发布时间】: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 通过参数匹配请求。

标签: ajax spring rest spring-mvc


【解决方案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 注解。

【讨论】:

    猜你喜欢
    • 2015-07-31
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    相关资源
    最近更新 更多