SpringBoot+Vue学习(二)
SpringBoot的MVC架构
SpringBoot的MVC架构如图所示,分为Model、View、Controller三部分
控制器注解
- SpringBoot提供了@Controller和@RestController两种注解来标识某个类,表示这个类将会负责接受和处理HTTP请求
- 如果请求的是页面和数据,则使用@Controller注解,该注解用于前后端不分离的项目
如果只是请求数据,则可以使用@RestController注解,该注解用于前后端分离的项目
默认情况下,@RestController注解会将返回的对象数据转换成JSON格式
路由映射
@RequestMapping注解主要负责URL的路由映射。它可以添加在Controller类或者具体的方法上
如果添加在Controller类上,则这个Controller中的所有路由映射都将会加上此映射规则,如果添加在方法上,则只对当前方法生效
@RequestMapping注解包含很多属性参数来定义HTTP的请求映射规则。常用的属性参数如下:
- value:请求URL的路径,支持URL模版、正则表达式
- method:HTTP请求方法,如get、post、delete、put等
- consumes:请求的媒体类型(Content-Type),如application/json
- produces:相应的媒体类型
- params,headers:请求的参数及请求头的值
@RequestMapping的通配符匹配非常简单实用,支持”“、”?”、”*“等通配符
符号”“匹配任意字符,符号”*“匹配任意路径,符号”?”匹配单个字符
有通配符的优先级低于没有通配符的,比如/user/add.json比/user/*.json优先匹配
有”*”通配符的优先级低于有 “\“通配符的
@RequestMapping(“/hello”,method = RequestMethod.GET)与@GetMapping(“/hello”)效果相同
参数传递
- @RequestParam将请求参数绑定到控制器的方法参数上,接收的参数来自HTTP请求提货请求url的QueryString,当请求的参数名称与Controller的业务方法参数名称一致时,@RequestParam可以省略
- @PathVaraible:用来处理动态的URL,URL的值可以作为控制器中处理方法的参数
- @RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非Content-Type:application/x-www-form-urlencoded编码格式的数据,比如:“application/json”、“application/xml”等类型的数据
修改hello方法,添加参数name
后续测试时请求的参数名称与业务方法中的参数名相同,所以我这里省略@RequestParam注解
在浏览器中访问http://localhost:8080/hello 并向参数name赋值
浏览器成功返回“你好 SpringBoot”
- 需要传递多个参数时,各个参数间用“&”符号进行连接
若url请求中的参数名与方法中的参数名不一样,则必须在方法中加入@RequestParam注解,否则方法无法正常接收到参数的值
若添加了@RequestParam注解,url在进行请求时必须传入该参数,否则hello方法无法被调用,同时传入的参数名应当改为phone而不是phonenum
- 这里url传递的参数名为phone,方法中定义的参数名为phonenum,但是参数仍被正常传入hello方法
- 当需要传入的参数很多时,可以将参数封装成类
- 在com.example.helloworld包下新建entity包
- 在entity包下新建User类,并重写toString方法
1.在HelloController类中新建postTest方法,并添加@PostMapping注解,表示此方法仅接受post请求,并将请求中的数据赋值给User类的一个实例usr
- 在ApiPost中添加一个post请求的测试,并传入参数username和password(这两个参数的名字需要和User类中定义的成员变量名相同)
- 可以看到ApiPost中成功返回“POST请求”这一字符串,并且IDEA中成功打印相关的username和password信息
- 如果传入的参数想要是JSON格式的数据,则需要在方法的传入参数前添加@RequestBody注解