1.使用?加&来传参
localhost:8080/.../getId?name=zhangsan&id=1234&......
适用于 请求参数较少的时候
缺点:1.请求参数比较多时,可能会丢参数,因为get请求有长度限制。
2.不使用?&传参(不常用)
@PathVariable将 URL 中占位符参数绑定到控制器处理方法的入参中。URL 中的 {xxx} 占位符可以通过 @PathVariable (“xxx”) 绑定到操作方法的入参中。一般与 @RequestMapping (method = RequestMethod.GET) 一起使用
@RequestMapping("/getUserById/{name}") public String getUser(@PathVariable("name") String name){ return name; }
动态接口
@RequestMapping("/{channel}getId/{name}") public String getUser(@PathVariable("name") String name, @PathVariable("channel") String channel){ return name + channel; }
调用地址为:localhost:8080/.../jdgetId/zhangsan
其中入参channel获得的值为:jd;
3.@RequestBody
@PostMapping("/test") public String test(@RequestBody TestPo testPo){ return testPo.getName() + "," + testPo.getId(); }
将前端body传回的json反序列化成java对象,属性必须一一对应,否则无法取到;它只能用于接收 POST 请求,因为 GET 方式无请求体。在后端的同一个接收方法里,@RequestBody
与@RequestParam
可以同时使用
如果前端使用 jQuery,可以使用它的 $.ajax 方法来发送包含 JSON 数据的 POST 请求。
var data = { name: '张三', age: 25 }; $.ajax({ type: 'POST', url: '/addUser', data: JSON.stringify(data), contentType: 'application/json', success: function(response) { // ... } });
问题:
1.第一种方式中,参数重复了应该取那个?
http://localhost:8080/test?name=qqq&id=2333&name=eee&id=1111
@GetMapping("/test") public String test(String name, int id){ return name + "," + id; }
其结果为:qqq,eee,2333
也就是说,String类型会组合,int类型会选第一个;
2.第三种方式中,参数重复了应该取那个?
{ "name":"qqq", "id":233, "name":"zhangsan", "id":4444 }
前端传回json如上
返回结果为:zhangsan,4444 后出现的值会覆盖前面的值
3.第二种传参方式,如何设置非必传参数
@RequestMapping(value = {"/greet", "/greet/{name}"}) public String greet(@PathVariable(required = false) String name) { if (name == null) { return "Hello, World!"; } else { return "Hello, " + name + "!"; } }
如上,设置@PathVariable(required = false)
,并设置多种url访问