当前位置: 首页 > 知识库问答 >
问题:

@RequestBody和@RequestParam之间有什么区别?

那铭
2023-03-14

我通过Spring文档了解了@requestbody,他们给出了如下解释:

@requestbody方法参数注释指示方法参数应绑定到HTTP请求主体的值。例如:

@RequestMapping(value = "/something", method = RequestMethod.PUT)
public void handle(@RequestBody String body, Writer writer) throws IOException {
  writer.write(body);
}

您可以使用HttpMessageConverter将请求正文转换为方法参数。HttpMessageConverter负责将HTTP请求消息转换为对象,并将对象转换为HTTP响应正文。

DispatcherServlet支持使用DefaultanNotationHandlerMappingAnnotationMethodHandlerAdapter进行基于注释的处理。在Spring 3.0中,AnnotationMethodHandlerAdapter得到扩展,以支持@RequestBody,并且默认情况下注册了以下HttpMessageConverter:

...

但我感到困惑的是,他们写在文件上的那句话是

他们这么说是什么意思?谁能给我举个例子吗?

spring文档中的@requestparam定义是

批注,该批注指示方法参数应绑定到web请求参数。支持servletportlet环境中的注释处理程序方法。

我已经把他们弄糊涂了。请帮我举个例子说明它们之间的区别。

共有1个答案

微生旻
2023-03-14

@requestparam带注释的参数链接到特定的Servlet请求参数。参数值转换为声明的方法参数类型。此注释指示方法参数应绑定到web请求参数。

例如,Spring RequestParam(s)的角度请求如下所示:

$http.post('http://localhost:7777/scan/l/register?username="Johny"&password="123123"&auth=true')
      .success(function (data, status, headers, config) {
                        ...
                    })

具有RequestParam得终结点:

@RequestMapping(method = RequestMethod.POST, value = "/register")
public Map<String, String> register(Model uiModel,
                                    @RequestParam String username,
                                    @RequestParam String password,
                                    @RequestParam boolean auth,
                                    HttpServletRequest httpServletRequest) {...

例如,Spring RequestBody的Angular请求如下所示:

$scope.user = {
            username: "foo",
            auth: true,
            password: "bar"
        };    
$http.post('http://localhost:7777/scan/l/register', $scope.user).
                        success(function (data, status, headers, config) {
                            ...
                        })
@RequestMapping(method = RequestMethod.POST, produces = "application/json", 
                value = "/register")
public Map<String, String> register(Model uiModel,
                                    @RequestBody User user,
                                    HttpServletRequest httpServletRequest) {... 
 类似资料:
  • 问题内容: 我遍历了Spring文档以了解,他们给出了以下解释: 所述方法参数注释指示方法参数应绑定到HTTP请求正文的值。例如: 你可以通过使用将请求主体转换为方法参数。负责从HTTP请求消息转换为对象,并从对象转换为HTTP响应主体。 支持使用和进行基于注释的处理。在Spring 3.0中,扩展为支持,并且默认情况下注册了以下: … 但我的困惑是他们在文档中写的句子是 方法参数注释指示方法参数

  • 我的理解是请求参数是方法传递所需的id,而path变量说这个变量应该在请求过程中找到

  • 问题内容: 和处理特殊字符之间有什么区别? 被空间接受。 在的情况下,被接受为。 问题答案: 是要从URI(Spring称为URI模板)中获取一些占位符 也是要从URI中获取参数—请参见Spring Reference第16.3.3.3章,使用@RequestParam将请求参数绑定到方法参数 如果该网址在2013年12月5日获得了用户1234的发票,则控制器方法如下所示: 同样,请求参数可以是可

  • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型

  • 问题内容: 今天,我按照一些说明在Linux中安装软件。有一个脚本需要首先运行。它设置一些环境变量。 指令告诉我要执行,但是我执行错误了。因此未设置环境。最后,我注意到了这一点并继续进行。 我想知道这两种调用脚本方法的区别。我对Linux完全陌生,所以请尽可能详细。 问题答案: 运行脚本,将启动一个新的运行脚本的外壳。新的外壳程序不会影响启动脚本的父外壳程序。 是的简写形式,它将在当前shell中

  • 问题内容: 我刚开始使用Spring。我遇到了很多教程。我看到使用更多的例子比。我查看了Spring文档,但无法弄清楚使用其中一个的好处。有人可以提供一些解释吗? 问题答案: 是的便捷子类。 JavaDoc描述了一些添加的属性,这些属性在某些情况下可能有用: UrlBasedViewResolver的便利子类,它支持InternalResourceView(即Servlet和JSP)以及诸如Jst