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

SpringBoot:同时使用@RequestParam和@RequestBody

高功
2023-03-14

看起来在这个话题上有一些问题,但许多问题现在已经过时,或者问的是不同的问题。

例如,我想做

curl -d '{ "name": "Joe Bloggs" }' http://localhost:8080/test?debug=Y

我不想在

我有一个方法签名,它同时接受请求参数和请求主体(它是Kotlin,但我不认为这实际上有什么不同)。

@PostMapping(value = ["/test"])
fun getGCP(@RequestBody json: String, @RequestParam debug: String) : String 

我可以很好地访问RequestParam,但是RequestBody包含的不仅仅是我在body中发送的JSON,它包含了body和请求参数的合并。在上面的示例中,它将为body绑定输出以下内容

debug=Y&{"name": "Joe Blogs"}=

有没有一种方法可以简单地将RequestParameter和RequestBody作为单独的实体来获取?

共有1个答案

柳星晖
2023-03-14

问题是传入请求的内容编码。将curl命令更改为

curl -H "Content-Type: application/json" -d '{ "name": "Joe Bloggs" }' http://localhost:8080/test?debug=Y

导致我的输出显示

debug=N
json={ "name": "Joe Bloggs" }
 类似资料:
  • 我使用的是Spring-MVC3.1.0.版本,由于某种原因,将POST与查询params和请求body进行映射是不起作用的。 下面是我的控制器方法的外观: 但是,如果我将所有请求参数转换为路径参数,映射就会起作用。有人遇到过类似的事情吗? 谢了!

  • 问题内容: 结合使用HTTP开发客户端和发布请求和Content-Type应用程序/ x-www-form-urlencoded 1)仅@RequestBody 请求-本地主机:8080 / SpringMVC /欢迎进入正文-name = abc Code //如预期的那样将正文命名为“ name = abc” 2)仅@RequestParam 请求-本地主机:8080 / SpringMVC

  • 使用带有Post请求和Content-Type Application/x-www-form-urlencoded的HTTP dev客户端 URL:localhost:8080/springmvc/welcome 正文:name=abc URL:localhost:8080/springmvc/welcome 在body-name=abc中 URL:localhost:8080/springmvc

  • 我们的软件使用api(filenet p8),需要配置log4j。我们使用logBack和Spring Boot。我注意到,要在Spring Boot中使用log4j,我们必须排除logBack。这是不可能的。有没有办法在Spring Boot中并行运行log4j和logBack?谢啦

  • 我尝试使用和通过Postman发送JSON和多个文件,但它不起作用。有可能在API中同时使用这两个注释吗?

  • 我有一些应用程序在Spring boot中使用微服务架构。我已经在RestTemplate中使用@PathVariable发送了查询参数、对象、模型等。开发应用程序后,我做了一些研究,要求使用@RequestParam和@RequestBody。但我无法理解,也不知道如何使用@RequestBody和@RequestParam。使用@RequestBody而不是@PathVariable有什么好处