Java框架中的那些注解们
@GetMapping、@PostMapping和@RequestMapping
以上注解用于简化http请求,用于controller层
@
G
e
t
M
a
p
p
i
n
g
\color{#FF3030}{@GetMapping}
@GetMapping
指定为get请求方式,是@RequestMapping(method = RequestMethod.GET)的缩写
@GetMapping("/empl/list")
public Resp selectPage(PageDto page, EmployeeMgrVo vo) {
...
}
@
P
o
s
t
M
a
p
p
i
n
g
\color{#FF3030}{@PostMapping}
@PostMapping
指定为post请求方式,是@RequestMapping(method = RequestMethod.POST)的缩写
@PostMapping("/empl/edit")
public Resp editAccount(@RequestBody EmplVo vo) {
...
}
@
R
e
q
u
e
s
t
M
a
p
p
i
n
g
\color{#FF3030}{@RequestMapping}
@RequestMapping
接收包括get,post,put,delete等所有请求方式,为以上两种注解的父类。可以在不确定用何种方式怕出错时选择,但是不建议这样使用,最好是确定好需求确定具体的映射方式,有利于代码可读性。
一般查看数据接口使用get,提交数据使用post,更具体使用可以参考https://blog.csdn.net/tolode/article/details/103058290
@PathVariable、@RequestParam和@RequestBody
@
P
a
t
h
V
a
r
i
a
b
l
e
\color{#FF3030}{@PathVariable}
@PathVariable
可以识别url路径中的模板参数,作为占位符绑定在路径的入参中,例如如下http请求:
http://localhost:8080/visit/getInfo/18
那么可以使用注解获取url里面的参数,此时,18就作为参数(id)传入
@GetMapping("/visit/getInfo/{id}")
public Resp getVisitorInfo(@PathVariable("id") Long id) {
...
}
再例如请求合相应的代码如下:
http://localhost:8080/visit/小明/20
@GetMapping("/visit/{name}/{age}")
public Resp getVisitorInfo(Person p, @PathVariable("name") String username, @PathVariable Long age) {
...
}
此时,小明对应的就是name,20对应的age,其中Person并不使用占位符。前端传参的URL必须与@GetMapping中的URL保持一致,且参数位置也需要保持一致,否则路径将无法匹配,导致找不到位置。
同时可以注意到,占位符中的name和实际的username是不一样的,此时要注意,如果参数的名称和路径的名称不一致时,需要在@PathVariable后面标注,使其名字和路径的入参名称保持一致。
@
R
e
q
u
e
s
t
P
a
r
a
m
\color{#FF3030}{@RequestParam}
@RequestParam
参数从request中获取值,通过Request.getParameter() 的方式获取的值,支持多个同时使用,提交方式同时支持get和post。注解有以下参数:
- name/value 绑定本次参数的名称,需要和URL中保持一致,两者意义没有太大差别
- required 是否必须,默认为必传。
- defaultValue 如果参数中没有同名参数时的默认值
示例:
http://localhost:8080/springmvc/hello?name=zhang3&age=20
@GetMapping("/hello")
public Resp getVisitorInfo(@RequestParam("name") String name, @RequestParam("age") Long age) {
...
}
如上所示:URL请求路径一般为http://…/xxx?A=a&B=b&… @RequestParam中的值用于接收模板中的参数值
@
R
e
q
u
e
s
t
B
o
d
y
\color{#FF3030}{@RequestBody}
@RequestBody
主要用于接收前端给后端传送的json数据(请求体内的数据),使用post方式进行提交
示例:
http://localhost:8080/submit
@PostMapping(value = "/submit")
public Resp submit(@RequestBody sVo Vo) {
...
}
由于参数vo是请求体中的,因此URL路径中并不包含请求参数vo,而是被@RequestBody用方法参数接收
值得一提的是,同一个接收方法,可以同时存在@PathVariable、@RequestParam和@RequestBody,且可以同时存在多个@PathVariable和@RequestParam,但是@RequestBody只能有一个
@ResponseBody
这个和@RequestBody长得很像的是什么东东呢?顾名思义,这个东西的意思是响应体,其实就是收到请求后,将方法返回的对象转换为json格式响应返回,写入HTTP response body中,可以加在类上面,也可以加在方法上。来一段示例:
@Controller
@RequestMapping("/emp")
public class Emp {
@ResposeBody
@GetMapping("getInfoById/{id}")
public Employee getInfoById(@PathVariable("id") Integer id) {
...
return empl;
}
}
加上该注解后,return的empl会是Employee类型的,并且会被转换为json格式响应给前端,如果不加的话,那么就会返回配置好的empl.jsp页面,如果empl.jsp页面不存在,就会报404错误。
参考文档:
https://blog.csdn.net/justry_deng/article/details/80972817/