说明:
(1)前面几篇博客我们简单介绍了【Spring MVC】,对【Spring MVC】有了简单的认识;从本篇博客开始,将详细介绍【Spring MVC】;
(2)本篇博客开始,介绍【Spring MVC数据绑定】;然后本篇博客介绍其中的URL映射,URL映射是指【Spring MVC中,Controller控制器的某一个方法】如何和【url】绑定在一起;前面接触了【@GetMapping("/t")注解 】和【@ResponseBody注解】,自然还有其他注解可以完成类似的工作;
(3)本篇博客代码沿用【SpringMVC入门与数据绑定3:Spring MVC初体验三:Spring MVC环境配置;】中的代码;
目录
一:URL Mapping(URL映射)简介;
二:【@GetMapping】、【@PostMapping】案例;
1.创建URLMappingController类:使用【@GetMapping】、【@PostMapping】;
2. 【@GetMapping】:提起get请求,观察效果;
3. 【@PostMapping】:提起post请求,观察效果;
三:【@RequestMapping】案例;
1.可以在类上,使用【@RequestMapping】;
(1)在类上 【@RequestMapping】;
(2)【@RequestMapping】:提起请求,观察效果;
2.也可以在方法上,使用【@RequestMapping】;(只是一般不这么干)
一:URL Mapping(URL映射)简介;
(1)可以这样理解:对于web应用来说,所有对外暴露的接口,都是一个一个的URL网址;我们通过URL来调用并执行后端的代码;
(1)@RequestMapping是一个通用的注解;
● 这个注解一般是用在类上的,为类中所有方法上的【@GetMapping】、【@PostMapping】赋予访问前缀;
● 这个注解也可以使用在方法上,作为 【@GetMapping】、【@PostMapping】的通用书写方式;即,@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写;
(2)@GetMapping,@PostMapping是使用在方法上的,分别对应get请求和post请求;
(3)接下来的案例,会详细介绍这三个注解;
(1)可以这样理解:对于web应用来说,所有对外暴露的接口,都是一个一个的URL网址;我们通过URL来调用并执行后端的代码;
(1)@RequestMapping是一个通用的注解;
● 这个注解一般是用在类上的,为类中所有方法上的【@GetMapping】、【@PostMapping】赋予访问前缀;
● 这个注解也可以使用在方法上,作为 【@GetMapping】、【@PostMapping】的通用书写方式;即,@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写;
(2)@GetMapping,@PostMapping是使用在方法上的,分别对应get请求和post请求;
(3)接下来的案例,会详细介绍这三个注解;
二:【@GetMapping】、【@PostMapping】案例;
1.创建URLMappingController类:使用【@GetMapping】、【@PostMapping】;
URLMappingController类:
package com.imooc.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class URLMappingController {
@GetMapping("/g")
@ResponseBody
public String getMapping() {
return "This is getMethod.";
}
@PostMapping("/p")
@ResponseBody
public String postMapping() {
return "This is postMethod.";
}
}
2. 【@GetMapping】:提起get请求,观察效果;
3. 【@PostMapping】:提起post请求,观察效果;
错误原因:通过浏览器的地址栏输入地址,所访问的URL都是get请求,因此如果以post定义方法,那么由于请求与实现的不一致,会返回405错误,method not allowed, The specified HTTP method is not allowed for the requested resource。这归根到底是因为浏览器发送了get请求,而方法只能处理post请求,所以发生的错误。可以参考下【附加:一般情况下,通过浏览器的地址栏输入url,发送的只能是get请求;(即【哪些情况下会发送get请求】,【哪些情况下会发送post请求】)】
如果想测试postMapping()方法,可以创建一个HTML表单,然后表单提交方式为post方式,如下:
1.创建URLMappingController类:使用【@GetMapping】、【@PostMapping】;
URLMappingController类:
package com.imooc.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class URLMappingController {
@GetMapping("/g")
@ResponseBody
public String getMapping() {
return "This is getMethod.";
}
@PostMapping("/p")
@ResponseBody
public String postMapping() {
return "This is postMethod.";
}
}
2. 【@GetMapping】:提起get请求,观察效果;
3. 【@PostMapping】:提起post请求,观察效果;
错误原因:通过浏览器的地址栏输入地址,所访问的URL都是get请求,因此如果以post定义方法,那么由于请求与实现的不一致,会返回405错误,method not allowed, The specified HTTP method is not allowed for the requested resource。这归根到底是因为浏览器发送了get请求,而方法只能处理post请求,所以发生的错误。可以参考下【附加:一般情况下,通过浏览器的地址栏输入url,发送的只能是get请求;(即【哪些情况下会发送get请求】,【哪些情况下会发送post请求】)】
如果想测试postMapping()方法,可以创建一个HTML表单,然后表单提交方式为post方式,如下:
三:【@RequestMapping】案例;
1.可以在类上,使用【@RequestMapping】;
(1)在类上 【@RequestMapping】;
package com.imooc.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("um")
public class URLMappingController {
@GetMapping("/g")
@ResponseBody
public String getMapping() {
return "This is getMethod.";
}
@PostMapping("/p")
@ResponseBody
public String postMapping() {
return "This is postMethod.";
}
}
说明:
(1)@RequestMapping注解:通常使用在类上;这个注解通常用于URL的全局设置;阐述如下:
● 我们知道一般的url是多级的:
● 如上,我们希望URLMappingController中的所有方法的映射地址,都以【/um】为前缀;自然我们这样设置:
● 如果URLMappingController中的方法比较少还好,我们一个一个的去加就行了;但是如果URLMappingController中有上百个方法时,上面的策略就会很麻烦,而且很容易出现遗漏;
● 为此,@RequestMapping就派上用场了;如上面代码所示;上面设置以后,URLMappingController类中所有的方法的url都会添加上【/um】前缀了;
● 即,【@RequestMapping】可以为当前类中所有的【@GetMapping】、【@PostMapping】赋予访问前缀;
(2)【@RequestMapping】:提起请求,观察效果;
重启应用,访问如下:
2.也可以在方法上,使用【@RequestMapping】;(只是一般不这么干)
阐述如下:
●【@RequestMapping】是一个全局的通用的请求映射;如果把其放在类上,就是为类中的、所有方法上的【@GetMapping】、【@PostMapping】赋予访问前缀;
● 如果把其放在方法上,那么其含义是,我们为当前方法绑定了url,但是不再区分get/post请求,即无论请求是get请求还是post请求,只要url对,都可以访问到这个方法;(不推荐这种用法,因为在实际开发中,每个方法应该有明确的访问方式,要么是get,要么是post;即,在方法上,还是推荐使用【@GetMapping】、【@PostMapping】);
● 【@RequestMapping】可以设置参数,让其只对请求方式为get方式的请求生效(Post同理);
但是,【@RequestMapping(value = "/g",method = RequestMethod.GET)】这种写法比较麻烦;所以,SpringMVC才提供了@GetMapping("/g")这种简写的方式;
● 在实际开发的时候,一般这样做:
1.可以在类上,使用【@RequestMapping】;
(1)在类上 【@RequestMapping】;
package com.imooc.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("um")
public class URLMappingController {
@GetMapping("/g")
@ResponseBody
public String getMapping() {
return "This is getMethod.";
}
@PostMapping("/p")
@ResponseBody
public String postMapping() {
return "This is postMethod.";
}
}
package com.imooc.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("um")
public class URLMappingController {
@GetMapping("/g")
@ResponseBody
public String getMapping() {
return "This is getMethod.";
}
@PostMapping("/p")
@ResponseBody
public String postMapping() {
return "This is postMethod.";
}
}
说明:
(1)@RequestMapping注解:通常使用在类上;这个注解通常用于URL的全局设置;阐述如下:
● 我们知道一般的url是多级的:
● 如上,我们希望URLMappingController中的所有方法的映射地址,都以【/um】为前缀;自然我们这样设置:
● 如果URLMappingController中的方法比较少还好,我们一个一个的去加就行了;但是如果URLMappingController中有上百个方法时,上面的策略就会很麻烦,而且很容易出现遗漏;
● 为此,@RequestMapping就派上用场了;如上面代码所示;上面设置以后,URLMappingController类中所有的方法的url都会添加上【/um】前缀了;
● 即,【@RequestMapping】可以为当前类中所有的【@GetMapping】、【@PostMapping】赋予访问前缀;
(2)【@RequestMapping】:提起请求,观察效果;
重启应用,访问如下:
2.也可以在方法上,使用【@RequestMapping】;(只是一般不这么干)
阐述如下:
●【@RequestMapping】是一个全局的通用的请求映射;如果把其放在类上,就是为类中的、所有方法上的【@GetMapping】、【@PostMapping】赋予访问前缀;
● 如果把其放在方法上,那么其含义是,我们为当前方法绑定了url,但是不再区分get/post请求,即无论请求是get请求还是post请求,只要url对,都可以访问到这个方法;(不推荐这种用法,因为在实际开发中,每个方法应该有明确的访问方式,要么是get,要么是post;即,在方法上,还是推荐使用【@GetMapping】、【@PostMapping】);
● 【@RequestMapping】可以设置参数,让其只对请求方式为get方式的请求生效(Post同理);
但是,【@RequestMapping(value = "/g",method = RequestMethod.GET)】这种写法比较麻烦;所以,SpringMVC才提供了@GetMapping("/g")这种简写的方式;
● 在实际开发的时候,一般这样做:



