Spring MVC的常用注解
spring boot 默认集成了spring mvc,下面为spring mvc一些常用注解。
开发环境:intellij idea 2019.2.2
spring boot版本:2.1.8
新建一个名称为demo的spring boot项目。
一、controller注解
controller注解用于修饰java类,被修饰的类充当mvc中的控制器角色。
controller注解使用了@component修饰,使用controller注解修饰的类,会被@componentscan检测,并且会作为spring的bean被放到容器
中。
package com.example.demo; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.responsebody; @controller public class democontroller { @requestmapping("/index") @responsebody public string index(){ return "index"; } }
运行项目后,浏览器访问:http://localhost:8080/index,页面显示:
index
二、restcontroller注解
restcontroller注解是为了更方便使用@controller和@responsebody。
@responsebody修饰控制器方法,方法的返回值将会被写到http的响应体中,所返回的内容不放到模型中,也不会被解释为视图的名称。
下面例子等同于上面例子。
package com.example.demo; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller; @restcontroller public class democontroller { @requestmapping("/index") public string index(){ return "index"; } }
三、requestmapping注解
requestmapping注解可修饰类或方法,主要用于映射请求与处理方法。
当用于修饰类并设置了url时,表示为各个请求设置了url前缀。
requestmapping注解主要有以下属性:
(1)path与value:用于配置映射的url;
(2)method:映射的http方法,如get、post、put、delete;
也可以使用默认配置了@requestmapping的method属性的几个注解:
@getmapping等同于requestmapping(method="requestmethod.get")
@postmapping、@putmapping、@deletemapping类似。
(3)params:为映射的请求配置参数标识;
(4)consumes:配置请求的数据类型,如xml或json等;
(5)produces:配置响应的数据类型,如“application/json”返回json数据;
package com.example.demo; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; import org.springframework.web.bind.annotation.restcontroller; @restcontroller @requestmapping("/oa") public class democontroller { @requestmapping(value = "/index1") public string index1(){ return "index1"; } @requestmapping(value = "/index2", method = requestmethod.get) public string index2(){ return "index2"; } @getmapping(value = "/index3") public string index3(){ return "index3"; } }
浏览器分别访问:
http://localhost:8080/oa/index1
http://localhost:8080/oa/index2
http://localhost:8080/oa/index3
页面分别显示:
index1
index2
index3
四、pathvariable注解
pathvariable注解主要用于修饰方法参数,表示该方法参数是请求url的变量。
package com.example.demo; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.pathvariable; import org.springframework.web.bind.annotation.restcontroller; @restcontroller public class democontroller { @getmapping("/index1/{name}") public string index1(@pathvariable string name){ return "index1: " + name; } //可以为@pathvariable配置属性值,显式绑定方法参数与url变量的值 @getmapping("/index2/{name}") public string index2(@pathvariable("name") string lc){ return "index2: " + lc; } }
浏览器访问http://localhost:8080/index1/a
页面显示:
a
访问http://localhost:8080/index1/b
页面显示:
b
五、requestparam注解
requestparam注解用于获取请求体中的请求参数,如表单提交后获取页面控件name值。
package com.example.demo; import org.springframework.web.bind.annotation.postmapping; import org.springframework.web.bind.annotation.requestparam; import org.springframework.web.bind.annotation.restcontroller; import java.util.map; @restcontroller public class democontroller { @postmapping("/index1") public string index1(@requestparam string username){ return username; } //map存放所有请求参数 @postmapping("/index2") public string index2(@requestparam map<string,string> map){ string age = map.get("age"); string sex = map.get("sex"); return age + "," + sex; } }
随便在电脑中如桌面新建一个html文件:
<html> <body> <form method="post" action="http://localhost:8080/index1"> <input type="text" name="username" value="abc" /> <input type="submit" value="提交1" /> </form> <form method="post" action="http://localhost:8080/index2"> <input type="text" name="age" value="22" /> <input type="password" name="sex" value="male" /> <input type="submit" value="提交2" /> </form> </body> </html>
浏览器打开后,如果点击“提交1”按钮后,页面跳到http://localhost:8080/index1,显示abc。
如果点击“提交2”按钮后,页面跳到http://localhost:8080/index2,显示22,male。
六、文件上传
使用requestparam注解可以实现文件上传。
package com.example.demo; import org.springframework.web.bind.annotation.postmapping; import org.springframework.web.bind.annotation.requestparam; import org.springframework.web.bind.annotation.restcontroller; import org.springframework.web.multipart.multipartfile; import java.io.file; import java.io.ioexception; @restcontroller public class democontroller { @postmapping("/upload") public string upload(@requestparam("file") multipartfile file) throws ioexception { string filename = file.getoriginalfilename(); string filepath = "d:/"; file dest = new file(filepath + filename); file.transferto(dest); return "上传成功"; } }
随便新建一个html文件
<html> <body> <form method="post" action="http://localhost:8080/upload" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit" value="提交" /> </form> </body> </html>
浏览器打开后,选择一个文件,点击提交后,文件保存到了d盘。