请求路径接收

如果添加了注解但是不设置路径参数,那么接口路径默认为"/" 而因为有无/是等价的,所以即便路径最后没/,也会访问/接口。 如果设置了一个”/“的接口,那未设置路径的就无法再被访问到,设置了/的接口比默认为/的接口优先级更高

  • @RequestMapping 既可以用于类也可以用于方法,既可以选post也可以get
    • 不加method参数则post、get都能处理
  • @PostMapping 只能用于方法映射 处理post请求
  • @GetMapping 只能用于方法映射 处理get请求

  • consumes``produces该参数设置请求/返回的提交内容类型,如multipart/form-data

    • rest接口这两个参数就没啥意义
      1. @PostMapping(value = "/rest",
      2. consumes = "application/json;charset=UTF-8",
      3. produces = "application/json;charset=UTF-8") //有时候序列化会乱码
      等同于
      image.png

      请求参数处理

  • @DateTimeFormat(pattern = "yyyy-MM-dd") 将字符串反序列化接收为date型

  • @RequestParam 处理键值对参数,默认不符合设置参数参数名和参数类型的请求数据不会被接收
    • required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
    • defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值
    • value:参数名
    • name:后端表单的name值,相当于设置个别名,这样既无需改前端,也无需改后端,只需改下参数列表,但是不能和value共用。 例子:@RequestParam(name="phone") String mobile 这时前端传的参数名和后端参数名就不重要了,等同于别名。
  • @PathVariable 对于请求url进行处理,提取url中部分内容为控制器方法的参数
    • 如不同人的url请求就末尾不一样,其他都一样,对每一个人都写一个方法不可能,这时可以提取不同的部分作为方法参数
  • @RequestHeader(?) 用于接收名称为?的请求头信息,将一个请求头绑定到一个变量上
  • @RequestBody 接收json类型的请求参数,json中存在与实体类参数属性对应的键时,值会被注入到实体类参数中。只能用于处理post请求的请求体参数,get无请求体,不能用于get. 反正请求携带的键值对后端会自动反序列
    • 除了实体类还可以把请求封装为Map类型,test(@RequestBody Map<String,Object> map){...}
      • 这里直接Map map不写泛型,map也会默认为<String,Object>型,因为是映射json参数
    • 直接请求json键值对,不要再把键值对封装js对象
    • 映射规则实际上不一定名称要完全一致,类型也不一定要一致,但是最好还是保持名称和类型一致好
    • 还有一个很坑爹的问题,如果前端传递的是大写字母开头,或者第一个小写,第二个大写的名称时,很可能映射失败,即便跟后端保持了一致 ```java contentType: “application/json;charset=UTF-8”

data:JSON.stringify(json) json是json字符串 或者也可以 data:JSON.stringify({ 这则是将js对象作为参数传递给序列化函数 “”:?, “”:? })

```java
@GetMapping("/klasses/{klassId}/teachers")
public List<Teacher> getKlassRelatedTeachers(
         @PathVariable("klassId") Long klassId,   
         @RequestParam(value = "type", required = false) String type ) {
...
}
如果我们请求的 url :   /klasses/123456/teachers?type=web

那么我们服务获取到的数据就是:klassId=123456,type=we

返回值处理

RestController

  • 表示返回字符串型的控制器即不对返回做处理,直接返回用于控制器类。常用于返回json型
    • @Controller是返回媒体文件,实现页面跳转
      • **@Controller**返回任何类型都会走静态解析器然后返回页面或者404.
    • @RestController注解相当于@ResponseBody + @Controller合在一起的作用
      • @ResponseBody作用就是返回字符串型,不对返回字符串进行页面映射跳转。用于方法