请求路径接收
如果添加了注解但是不设置路径参数,那么接口路径默认为"/" 而因为有无/是等价的,所以即便路径最后没/,也会访问/接口。 如果设置了一个”/“的接口,那未设置路径的就无法再被访问到,设置了/的接口比默认为/的接口优先级更高
@RequestMapping既可以用于类也可以用于方法,既可以选post也可以get- 不加method参数则post、get都能处理
@PostMapping只能用于方法映射 处理post请求@GetMapping只能用于方法映射 处理get请求consumes``produces该参数设置请求/返回的提交内容类型,如multipart/form-data@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”
- 除了实体类还可以把请求封装为Map类型,
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作用就是返回字符串型,不对返回字符串进行页面映射跳转。用于方法
