简化了第三方包的引用,简化了依赖包的配置
快速入门:
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hetl.springboot_study</groupId>
<artifactId>springboot_study</artifactId>
<version>1.0-SNAPSHOT</version>
<!--spring-boot-->
<parent>
<version>2.3.2.RELEASE</version>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
启动springboot的两种方式:
1.在控制器中配置EnableAutoConfiguration并使用SpringApplication.run启动程序
2.创建一个app类,在app类中配置EnableAutoConfiguration和ComponenScan,在使用SpringApplication.run启动程序,并能够访问多个Controller(常用)
package com.hetl.day01.model;
public class Student {
private Integer id;
private String name;
private String gender;
private int age;
private String address;
public Student() {
}
public Student(String name, String gender, int age, String address) {
this.name = name;
this.gender = gender;
this.age = age;
this.address = address;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
@RestController
@EnableAutoConfiguration
@RequestMapping("student")
public class StudentController {
@RequestMapping("{id}")
@ResponseBody
public Student stuInfo(@PathVariable() Integer id){
Student stu = new Student("lisi","male",24,"河北");
stu.setId(id);
return stu;
}
}
@ComponentScan(basePackages = "com.hetl.day01.controller")
@EnableAutoConfiguration
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
}
springboot部分依赖
spring-boot-starter | 核心 POM,包含自动配置支持、日志库和对 YAML 配置文件的支持。 |
---|---|
spring-boot-starter-web | 支持 Web 应用开发,包含 Tomcat 和 spring-mvc |
spring-boot-starter-aop | 包含 spring-aop 和 AspectJ 来支持面向切面编程 |
spring-boot-starter-jdbc | 支持使用 JDBC 访问数据库 |
spring-boot-starter-log4j | 添加 Log4j 的支持 |
spring-boot-starter-test | 包含常用的测试所需的依赖,如 JUnit、Hamcrest、Mockito 和 spring-test 等 |
静态资源访问
Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:
- /static
- /public
- /resources
- /META-INF/resources
返回json格式数据
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@EnableAutoConfiguration
@RestController
public class UserController {
@RequestMapping("/login")
@ResponseBody
public Map<String,Object> login(String username,String password){
Map<String,Object> map = new HashMap<>();
if("hetl".equals(username) &&"123456".equals(password)){
map.put("success",1);
map.put("msg","");
}else {
map.put("success",0);
map.put("msg","用户名密码不正确");
}
return map;
}
}
全局捕获异常
- @ExceptionHandler 表示拦截异常
- @ControllerAdvice ,controller 的一个辅助类,最常用的就是作为全局异常处理的切面类,可以指定扫描范围约定了几种可行的返回值,如果是直接返回 model 类的话,需要使用@ResponseBody 进行 json 转换。
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;
@ControllerAdvice//切面
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)//捕获运行时异常
@ResponseBody
public Map<String,Object> exceptionHander(){
Map<String, Object> map = new HashMap<String, Object>();
map.put("errorCode", "101");
map.put("errorMsg", "系統错误!");
return map;
}
}
freemarker使用
1.依赖
<!-- 引入freeMarker的依赖包. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
import com.hetl.day01.model.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller //如果访问freemarker模板就不要使用RestController
@RequestMapping("/person")
public class PersonController {
@RequestMapping("/list")
@ResponseBody
public Map<String, Object> list(){
Map<String,Object> map = new HashMap<>();
map.put("username","lisi");
map.put("id","123456");
List<Student> arr = new ArrayList<>();
arr.add(new Student("zhangsan","male",24,"湖北"));
arr.add(new Student("zhangsan1","male",24,"湖北"));
arr.add(new Student("zhangsan2","male",24,"湖北"));
map.put("stu",arr);
return map;
}
@RequestMapping("/list1")
public String list1(Model model){
model.addAttribute("username","lisi");
model.addAttribute("age",24);
List<Student> arr = new ArrayList<>();
arr.add(new Student("zhangsan","male",24,"湖北"));
arr.add(new Student("zhangsan1","male",24,"湖北"));
arr.add(new Student("zhangsan2","male",24,"湖北"));
model.addAttribute("stu",arr);
return "stu/list";
}
}
3.在src/main/resources/创建一个templates文件夹,后缀为*.ftl
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8" />
<title></title>
</head>
<body>
欢迎${username}
<#if age <= 17>小哥
<#elseif age <= 30>先生
<#else>大叔
</#if>登录
<table border="1">
<tr>
<!--td>ID</td-->
<td>名字</td>
<td>性别</td>
<td>年龄</td>
<td>地址</td>
</tr>
<!--#list stuList?sort_by("id")?reverse as stu-->
<#list stu as s>
<tr>
<td> ${s.name}</td>
<td> ${s.gender}</td>
<td> ${s.age}</td>
<td> ${s.address}</td>
</tr>
</#list>
</table>
</body>
</html>