请求路径接收
如果添加了注解但是不设置路径参数,那么接口路径默认为"/"
而因为有无/
是等价的,所以即便路径最后没/
,也会访问/
接口。 如果设置了一个”/“的接口,那未设置路径的就无法再被访问到,设置了/的接口比默认为/
的接口优先级更高
@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
作用就是返回字符串型,不对返回字符串进行页面映射跳转。用于方法