初始化
- 创建项目,勾选 web/spring web 的 module
- 添加 Controller 包
- 添加 Controller.HelloContorller 类
package com.example.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
System.out.println("hello world");
return "hello world";
}
}注解:@RestController 请求处理类
@RequestMapping 请求处理方法
SpringBoot 起步依赖:
- spring-boot-starter-web
- spring-boot-starter-test
JavaEE:Java Enterprise Edition,Java企业版。指Java企业级开发的技术规范总和。包含13项技术规范:JDBC、JNDI、EJB、RMI、JSP、Servlet、XML、JMS、Java IDL、JTS、JTA、JavaMail、JAF
请求响应
简单参数
- 原始方式获取请求参数 Controller方法形参中声明HttpServletRequest对象 调用对象的getParameter(参数名)
@RequestMapping("/test")
public String simpleParam(HttpServletRequest request) {
String name = request.getParameter("name");
String ageStr = request.getParameter("age");
int age = Integer.parseInt(ageStr);
System.out.println(name + " " + age);
return "OK";
}- SpringBoot中接收简单参数 请求参数名与方法形参变量名相同 会自动进行类型转换
@RequestMapping("/test")
public String simpleParam(String name, Integer age) {
System.out.println(name + " " + age);
return "OK";
}- @RequestParam注解 方法形参名称与请求参数名称不匹配,通过该注解完成映射 该注解的require属性默认是true,代表请求参数必须传递
实体参数
简单实体对象:请求参数名与形参对象属性名相同,定义POJO接收即可
数组参数
数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数
集合参数:请求参数名与形参集合名称相同且请求参数为多个,@RequestParam 绑定参数关系
日期参数
日期参数:使用@DateTimeFormat注解完成日期参数格式转换
JSON 参数
JSON参数:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用 @RequestBody 标识
路径参数
路径参数:通过请求URL直接传递参数,使用{..来标识该路径参数,需要使用@PathVariable获取路径参数
统一响应
@ResponseBody
类型:方法注解、类注解
位置:Controller方法上/类上
作用:将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为JSON格式响应
说明:@RestController=@Controller+@ResponseBody;
Springboot项目的静态资源(html,css,js等前端资源)默认存放目录为:classpath:/static、classpath:/public、classpath:/resources
分层解耦
三层架构
dao、service、controller 层
IOC 和 DI
控制反转:InversionOfControl,简称iOC。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。
依赖注入:DependencyInjection,简称DI。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。
Bean对象:IOC容器中创建、管理的对象,称之为bean。
注解
- @Coraponent 声明bean的基础注解不属于以下三类时,用此注解
- @Controller @Component的衍生注解标注在控制器类上
- @Service @Component的衍生注解标注在业务类上
- @Repository @Component的衍生注解标注在数据访问类上(由于与mybatis整合,用的少)
没有指定,默认为类名首字母小写。使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller。
Bean组件扫描
前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描。
@ComponentScan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解@SpringBootApplication中,默认扫描的范围是启动类所在包及其子包。
Bean 注入
按照类型注入,如果类型重复,有三种解决方案:
- @Primary 添加在 @Component 前
- @Qualifier("") 添加在 @AutoWired 后
- @Resource(name="") 替换 @AutoWired