SpringBoot:一起使用@RequestParam和@RequestBody

时间:2019-01-23 18:16:15

标签: spring-boot

似乎有一些关于此主题的问题,但是现在有许多问题已经过时,或者正在问合理的不同事情。

我正在使用SpringBoot和@RestController注释。

我有一个简单的用例。我想将JSON字符串发送到还包含RequestParameter的REST端点。

例如,我想做

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不仅包含我在正文中发送的JSON,还包含正文和请求参数的合并。在上面的示例中,它将为主体绑定输出以下内容

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

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

1 个答案:

答案 0 :(得分:0)

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

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

导致我的输出显示

debug=N
json={ "name": "Joe Bloggs" }