@PathVariable注解
用于获取url中的参数,形如http://localhost:8080/user/{id}(仅用于get请求方式)
@GetMapping("/user/{idd}/{name}")
public String testPathVariable(@PathVariable(value = "idd") Integer id, @PathVariable String name)
@RequestParam注解
1、用于获取 Request 里参数值,形如http://localhost:8080/user?id=1。(用于get请求方式,或post请求里url中的参数)
2、用于获取接收前端表单提交的参数。(仅用于post请求方式)
@RequestMapping("/user")
public String testRequestParam(@RequestParam(value = "idd", required = false) Integer id)
实体类接收
表单提交实体类不用加注解,参数名映射实体类中的字段名,适用于参数较多的情况
@PostMapping("/form2")
public String testForm(User user)
@RequestBody 注解
当不是表单提交而是json格式提交,用@RequestBody注解可映射实体类
@PostMapping("/user")
public String testRequestBody(@RequestBody User user)
@RequestHeader获取头信息里的值
@CookieValue获取Cookie值
HttpServletRequest获取头消息/Cookie
后端可以通过HttpServletRequest 获取请求头的内容
@GetMapping("/demo3")
public void demo3(HttpServletRequest request) {
//获取token(name:value形式"token":"bearer***")
System.out.println(request.getHeader("token"));
//获取cookies(name:value形式"cookieName":"cookieValue")
for (Cookie cookie : request.getCookies()) {
if ("cookieName".equals(cookie.getName())) {
System.out.println(cookie.getValue());
}
}
}
注意:@RequestBody,它是用来处理Content-Type:application/json, application/xml等 而不是application/x-www-form-urlencoded编码的内容;使用@RequestBody注解接收参数的时候,从名称上来看也就是说要读取的数据在请求体里,前台的Content-Type必须要改为application/json,所以要发post请求,因为Ajax使用的POST,并且发送的是JSON对象。前端必须指定请求json数据的contentType为:application/json,否则会报类型不支持的异常错误“org.springframework.web.HttpMediaTypeNotSupportedException”
常见错误:
1、前端js发送ajax请求,Content-Type发送信息至服务器时内容编码类型,默认是application/x-www-form-urlencoded(这种格式的特点就是,name/value 成为一组,每组之间用 & 联接,这种形式是没有办法将复杂的 JSON 组织成键值对形式)
2、@RequestBody 接受参数。前端报 415,后端报 Content type ‘application/x-www-form-urlencoded;charset=UTF-8’ not supported//类型不匹配
**解决方法:**前端加 contentType : “application/json”。后端使用@RequestBody实体类或Map都能接受到参数