无注解接收
特点:参数非必传,如下我们可以只传id,age不传name是可以正常请求的。
//【Get】请求【http://localhost:8083/demo/testId?id=1&name=xiaozhang&age=20】后台不加任何注解,直接接收方式。注意请求的key必须和后台参数名称对应@GetMapping("/testId")public Result testId(int id,String name,int age){UserInfo userInfo = new UserInfo();userInfo.setId(id);userInfo.setName(name);userInfo.setAge(age);return Result.success(userInfo);}
场景:前端查询数据时经常含有多个条件,通常我们会封装对象,而不是一个个接收。在不加注解的情况下去请求查询就是个不错的方法,如下:
@GetMapping("/queryUserInfo")public Result queryUserInfo(UserInfo userInfo) {return Result.success(userInfo);}- Get请求【http://localhost:8083/demo/queryUserInfo?id=2&name=xiaozhang&age=22&sex=%E7%94%B7&phone=18675689576】- 响应结果:{"msg": "操作成功","code": 200,"data": {"id": 2,"name": "xiaozhang","age": 22,"sex": "男","phone": "18675689576","idCard": null}}
@RequestParam接收参数
使用这个注解需要注意两个点:- 加了这个参数后则请求中必须传递这个参数
- @RequestParam这个注解可以指定名字,请求参数必须和指定的这个名字相同,如果不指定,则默认为具体参数名
@GetMapping("/testRequestParam")public Result testRequestParam( int id, @RequestParam String name, int age) {UserInfo userInfo = new UserInfo();userInfo.setId(id);userInfo.setName(name);userInfo.setAge(age);return Result.success(userInfo);}
无注解请求和@RequestParam接收参数区别:无注解传参在请求时可以不一定要传入,而加上@RequestParam则一定要传的,否则报错。
Required request parameter 'name' for method parameter type String is not present
@PathVariable注解
作用:@Pathvariable映射URL绑定的占位符,将URL中的占位符参数绑定到控制器的方法进行入参。URL中{xxx}占位符可以通过@Pathvariable(“XXX”)进行绑定。一般是在get请求中使用。
//注意点:当参数名称和url中变量名称一致时可以简写@GetMapping("/testIdToPathVariable1/{id}")public Result testIdToPathVariable1(@PathVariable int id){return Result.success(id);}//不一样时PathVariable注解需要指定具体的参数名称@GetMapping("/testIdToPathVariable2/{id}")public Result testIdToPathVariable2(@PathVariable("id") int ids){return Result.success(ids);}
HttpServletRequest接收参数
从请求request流中获取参数,以下是最简单的使用方式:
//HttpServletRequest接收参数的几种方法@GetMapping("/testHttpServletRequest")public Result testHttpServletRequest(HttpServletRequest request) {String id = request.getParameter("id");return Result.success(id);}//请求 - http://localhost:8083/demo/testHttpServletRequest?id=1{"msg": "1","code": 200}
@RequestBody
作用:@RequestBody的作用其实是将json格式的数据转为java对象。就是将传入的json字符串映射转换为实体对象。使用@RequestBody接收数据时,一般都用POST方式进行提交
在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。
//@RequestBody接收请求体参数@GetMapping("/testRequestBody")public Result testRequestBody(@RequestBody UserInfo userInfo) {return Result.success(userInfo);}
### 测试@RequestBody传参POST http://localhost:8083/demo/testRequestBodyContent-Type: application/json{"id": 0,"name": "xiaochen","age": 0,"sex": "男","phone": null,"idCard": null}//响应{"msg": "操作成功","code": 200,"data": {"id": 0,"name": "xiaochen","age": 0,"sex": "男","phone": null,"idCard": null}}Response code: 200; Time: 69ms; Content length: 104 bytes
需要注意,如果前台传入参数和后台参数不一样,则无法映射到对应的实体类上。
如果参数时放在请求体中,application/json传入后台的话,那么后台要用@RequestBody才能接收到;如果不是放在请求体中的话,那么后台接收前台传过来的参数时,要用@RequestParam来接收,或 则形参前 什么也不写也能接收。
@RequestHeader&@CookieValue接收参数
@RequestHeader- @RequestHeader是将请求头信息和控制器方法的形参创建映射关系
- @RequestHeader注解一共有三个属性:value(值)、required(是否为必须的,默认为true)、defaultValue(当没值的时候,采取此值)。
@CookieValue
- 用来获取cookie中的value
- 参数、value:参数名称、required:是否必须、defaultValue:默认值
//@RequestHeader接收请求头参数@PostMapping("/testRequestHeaderAndCookie")public Result testRequestHeaderAndCookie(@RequestHeader String appkey ,@RequestHeader String appsecret,@CookieValue String cookieId) {List<Object> objects = new ArrayList<>();objects.add(appkey);objects.add(appsecret);objects.add(cookieId);return Result.success(objects);}


{"msg": "操作成功","code": 200,"data": ["test-key","test-secret","cookie-Id"]}
