Python 官方文档:入门教程 => 点击学习
目录@RequestBody和@RequestParam可以同时使用吗自己个人实际验证结果在postman发送如下post请求,返回正常body中参数如下值得注意的地方@Reques
@RequestParam和@RequestBody这两个注解是可以同时使用的。
网上有很多博客说@RequestParam 和@RequestBody不能同时使用,这是错误的。
根据Http协议,并没有说post请求不能带URL参数,经验证往一个带有参数的URL发送post请求也是可以成功的。只不过,我们日常开发使用GET请求搭配@RequestParam,使用POST请求搭配@RequestBody就满足了需求,基本不怎么同时使用二者而已。
package com.example.model;
import java.util.List;
public class PramInfo {
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
private int id;
private String str;
}
package com.example.demo;
import com.example.model.PramInfo;
import org.springframework.WEB.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/test")
public class TestContoller {
@RequestMapping(value = "/dxc")
public String print(PramInfo info) {
return info.getId() + ": :" + info.getStr();
}
@RequestMapping(value = "/getUserJSON")
public String getUserjson(@RequestParam(value = "id") int id, @RequestParam(value = "name2", required = false) String name2
, @RequestBody PramInfo pramInfo) {
return (id + "--" + name2 + ";paramInfo:" + pramInfo.getStr() + ";pramInfo.id:" + pramInfo.getId());
}
}
从结果来看,post请求URL带参数是没有问题的,所以@RequestParam和@RequestBody是可以同时使用的【经测试,分别使用Postman 和 httpClient框架编程发送http请求,后端@RequestParam和@RequestBody都可以正常接收请求参数,所以个人认为可能一些前端框架不支持或者没必要这么做,但是不能说@RequestParam和@RequestBody 不能同时使用】。
1、postman的GET请求是不支持请求body的;
2、
@GetMapping(value = "/dxc")
public String print(PramInfo info) {
return info.getId() + ": :" + info.getStr();
}
这种请求方式,不加@RequestParam注解,也能直接取出URL后面的参数,即参数可以与定义的类互相自动转化。
3、
@PostMapping(value = "/getUserJson")
public String getUserJson(@RequestParam(value = "id") int id, @RequestParam(value = "name2", required = false) String name2
, @RequestBody PramInfo pramInfo) {
return (id + "--" + name2 + ";paramInfo:" + pramInfo.getStr() + ";pramInfo.id:" + pramInfo.getId());
如果请求中的body没有ParamInfo对象对应的json串,即当body为空(连json串的{}都没有)时,会报请求body空异常:
2018-05-12 23:45:27.494 WARN 6768 --- [NIO-8080-exec-6] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public java.lang.String com.example.demo.TestContoller.getUserJson(int,java.lang.String,com.example.model.PramInfo)
-05-12 23:45:27.494 WARN 6768 --- [nio-8080-exec-6] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public java.lang.String com.example.demo.TestContoller.getUserJson(int,java.lang.String,com.example.model.PramInfo)
主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据);
将请求参数绑定到你控制器的方法参数上
GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。
@RequestBody:
如果后端参数是一个对象
且该参数前是以@RequestBody修饰的,那么前端传递json参数时,必须满足以下要求:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: 浅谈@RequestBody和@RequestParam可以同时使用
本文链接: https://lsjlt.com/news/142376.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0