基于SpringBoot的Web前后端分离开发
SpringBoot主程序
@SpringBootApplication
这是一个SpringBoot启动类的注解。
可以完成一系列自动化配置。
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
开发一个URL
开发一个可以在浏览器直接访问的URL地址,也就是常说的API接口,前后端分离后一般都是RESTful风格
返回的数据是Json格式,因此有了@RequestBody注解
- @Controller
- @RequestMapping(“url地址”)
- @ResponseBody
@Controller 可以让你的类成为一个API接口类
@RequestMapping(“url地址”) 可以让你用一个方法开发出一个url接口
@ResponseBody 可以让你返回的数据为json格式
因此在这样的环境下,业内有了 controller 层,即建一个 controller 包来放置你的API类
@Controller
public class DemoController {
@RequestMapping("/demo")
@ResponseBody
public String print(){
System.out.println("钟小湖");
return "哈哈";
}
}
带参数的URL
例如Get请求
实现也很简单
直接在方法上加入参数即可
@Controller
public class DemoController {
@RequestMapping("/demo")
@ResponseBody
public String print(String name){
System.out.println("Hello," + name);
return name;
}
}
public String print(String name)
然后你也可以更花哨点使用别名对name进行映射,或者前端工程师已经规定好了参数名,你迫于无奈。
举个例子:请求体参数是nick,你想在后台转化为name
nick = name
这时候 @RequestParam 注解就发挥作用了
@Controller
public class DemoController {
@RequestMapping("/demo")
@ResponseBody
public String print(@RequestParam("nick") String name){
System.out.println("Hello," + name);
return name;
}
}
问题来了,RESTful 讲究把参数直接通过网址的形式传送
例如 localhost:8080/demo/乐心湖
这时候 @PathVariable 注解就出来了
@Controller
public class DemoController {
@RequestMapping("/demo/{name}")
@ResponseBody
public String print(@PathVariable String name){
System.out.println("Hello," + name);
return name;
}
}
重点: @RequestMapping("/demo/{name}") 中的 {} 符号
多个参数也是可以的
@RequestMapping("/demo/{id}/{name}")
@ResponseBody
public String print(@PathVariable String name, @PathVariable String id) {
System.out.println(id + name);
return id + name;
}
还有更高级的自定义
@PathVariable(“映射的参数”)
例如:
@PathVariable("name") String name
//这样就可以把地址上的name变成程序内部的name了。
//就是最基础的映射
//因为name本身结果也是name,所以SpringMvc会自动帮我们映射,这个映射是没有必要写的。
所以,很多人习惯性把映射也写上,以为这是必需要的。
事实上你只需确保你的参数名不要瞎改,很多多余工作我们也就省去了。
值得一提的是:这一切的注解和花哨操作都是基于两个接口
HttpServletRequest
HttpServletResponse
例如我们使用 @RequestParam 获取了请求头中的name参数
也可以用老大哥 HttpServletRequest 实现
@Controller
public class DemoController {
@RequestMapping("/demo")
@ResponseBody
public String print(HttpServletRequ