Spring---@RequestMapping注解和它的属性RequestMapping注解
@RequestMapping注解能将请求和处理请求的控制器⽅法关联起来,建⽴映射关系。
在SpringMvc接收到请求后就会来对应的ReuestMapping注解对⽐,并处理请求。注意:在使⽤时要确保RequesstMapping注解⾥⾯的值唯⼀。
RequestMapping注解加载在类和⽅法上的不同
注解加载类上时,设置的映射路径请求的初始信息
注解加在⽅法上时,设置的映射路径请求的具体信息
就是说你如果想访问在⽅法⾥的具体信息,就先要具备类上⾯的初始信息
在下⾯,如果想访问index,这时访问的路径应该是 /user/ ⽽不再是 / ,访问login就访问的路径就应该为 /user/login。这样的结构可以⽤在划分权限上⾯,在类上⾯进⾏划分
@Controller
@RequestMapping("/user")
public class HelloMvc {
// 将请求和⽅法创建映射关系通过 value 属性设置当浏览器请求某⼀地址【value】时,由下⾯这个⽅法处理请求,并指向访问资源或别的
@RequestMapping("/")
public String helloIndex(){
// 返回视图名称
return "index";
}
@RequestMapping("/target")
public String getTarget(){
return "target";
}
@RequestMapping("/login")
public String goToLogin(){
return "login";
}
}
属性设置的越多匹配的越精确但是不要出现为了精致为了精确⽽精确,要优雅
RequestMapping注解的value
value属性的值是⼀个String数组,他能设置多个值,使得多个请求地址指向同⼀个资源
如果出错,会报 404不到资源
@RequestMapping(
value = {"/login","/testlogin"}
)
public String goToLogin(){
return "login";
}
RequestMapping注解的Method参数
在@RequestMapping中设置调⽤属性设置参数时,属性之间要⽤ , 隔开
method在不进⾏设置时,使⽤什么请求都能进⾏匹配执⾏。
method是⼀个RequestMethod【枚举】类型的数组,可以添加多个值,从⽽进⾏匹配多中请求形式的请求
如果只设置了⼀个处理请求⽅式的参数,在使⽤其他请求⽅式进⾏请求⽬标资源时,就会出现 Completed 405
METHOD_NOT_ALLOWED这类错误,说明就是请求⽅式不符合条件。这时可以通过有好的报错页⾯或跳转转发到其他页⾯。
设置的越多要符合标准就越多,锁定的资源就越准确
在java⽂件中
@RequestMapping(
value = {"/login","/testlogin"},
method = {RequestMethod.GET,RequestMethod.POST}
)
public String goToLogin(){
return "login";
}
@RequestMapping注解的派⽣注解
对于处理指定请求⽅式的控制器⽅法,SpringMVC中提供了@RequestMapping的派⽣注解【⽣的⼉⼦,功能更细致】
处理get请求的映射-->@GetMapping
处理post请求的映射-->@PostMapping
处理put请求的映射-->@PutMapping
处理delete请求的映射-->@DeleteMapping
因为浏览器只能发送get或post请求,要是强⾏给form表单添加其他请求⽅式就会报请求类型不匹配的错,form表单默认是get请求。由于让匹配put请求没匹配到就会说请求⽅式 get 不匹配.会报错405
@RequestMapping注解的params属性
在参数中value值为
" aaa "则表⽰必须要有aaa参数
" !aaa "则表⽰不能有参数aaa
" aaa=123 "则表⽰参数中必须要有aaa,并且值必须是123
springmvc的注解有哪些" aaa!=123 "则表⽰参数中必须要有aaa,但是值不能等于123
如果由不匹配的会报错400
java⽂件中
@RequestMapping(
value = {"/testParams"},
params = {"username", "!password"}
)
public String testParams() {
return "login";
}
在html⽂件中
这两种都⾏
前⼀种使⽤的拼接字符串形式实现get请求
后⼀种使⽤的是thymeleaf语法实现请求参数传递,达成get请求
<a th:href="@{/testParams?username='heihei'&password='123123'}">测试params属性</a><br>
<a th:href="@{/testParams(username='heihei',password='123123')}">测试params属性</a><br>
RequestMapping注解的headers属性
headers参数通过设置请求头信息筛选请求
使⽤headers属性的⽅法和params属性的⽅法⼀样,可以多个参数进⾏赋值,在赋值规则上⾯也⼀样
在参数中value值为
" aaa "则表⽰必须要有aaa参数
" !aaa "则表⽰不能有参数aaa
" aaa=123 "则表⽰参数中必须要有aaa,并且值必须是123
" aaa!=123 "则表⽰参数中必须要有aaa,但是值不能等于123
如果设置了请求头信息没有被匹配到,⽽其他的属性都匹配到了,就会报404错误告诉你不到资源
在java中
@RequestMapping(
value = {"/testParams"},
params = {"username", "!password"},
headers = {"Host=localhost:8081"}
)
public String testParams() {
return "login";
}
RquestMapping注解的⽀持ant风格的路径
1、? 占位符,使⽤时value = "/aa?a?a?a?/请求路径",每⼀个?代表⼀个符号,可以⽤字母、数字、⼀些符号代替在请求路径上,例
如:/a1a#a&a:a/test,但是不能是中⽂的符号也不能是 ? 、/
2、* 在路径⾥添加0到多个字符,跟上⾯的?⼀样,不能使⽤中⽂符号和/、?。例如:/*dasd/test,在 * 的位置能替代多个或者0个字符。/ aaaaaaaaadasd/test。 *后⾯的内容是不能变的,变了会报错
3、**在路径⾥添加0或多层⽬录,只能单独使⽤.如果和不同的字符混在⼀起
/**aa/test
就会被当做两个*处理,所以只能 /**/test,这样使⽤。在⾥⾯能⽤中⽂符号、/、?都可以。
SpringMvc⽀持请求路径中⽤占位符
在RequestMapping的value属性中⽀持设置占位符【 value = {" /请求路径/{ 参数名 }/..... "} 】,在value的请求路径后⾯可以建⽴占位符,接收请求参数,在{}⾥给参数起名,将参数由平时的拼接字符
串形式转换成为路径的形式【/..../.../】,在请求控制器接收到请求后会解析Spring配置⽂件,通过组件扫描到对应请求,并将请求后的参数值赋给这⾥起的参数名,在处理请求的⽅法中添加对应类型的参数,以
@PathVariable( "参数名" )注解指定将哪⼀个参数值传递给当前处理⽅法的哪⼀个参数。这个@PathVariable注解只能在⽅法参数上应⽤,源码⾥他的修饰符【@Target({ElementType.PARAMETER})】,⽽且SpringMvc获取请求参数的注解⽐较单⼀就这⼀个。
在java中
@RequestMapping(value = {"/testPath/{id}/{username}"})
public String testPath(@PathVariable("id")Integer id,@PathVariable("username")String username){
System.out.println("id = " + id+"username = " + username);
return "login";
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论