市环保局网站建设方案,网站源码免费的,广东住房和城乡建设厅官方网站,推广方式是什么意思1. SpringBootWeb入门开发
需求#xff1a;使用SpringBoot 开发一个web 应用#xff0c;浏览器发起请求 /hello 后#xff0c;给浏览器返回字符串Hello World~。
步骤#xff1a; 1. 创建springBoot工程#xff0c;并勾选web开发相关依赖。 2. 定义 HelloCo…1. SpringBootWeb入门开发
需求使用SpringBoot 开发一个web 应用浏览器发起请求 /hello 后给浏览器返回字符串Hello World~。
步骤 1. 创建springBoot工程并勾选web开发相关依赖。 2. 定义 HelloController类添加方法 hello并添加注释。 3. 运行测试
RestController
// RestController 标识下面这个类为请求处理类
public class HelloController {RequestMapping(/hello)// RequestMapping(/hello) 指定请求处理路径public String hello(){System.out.println(hello world~);return hello world~;}
}
启动类
// 启动类 启动springBoot 工程
SpringBootApplication
public class Demo1Application {public static void main(String[] args) {SpringApplication.run(Demo1Application.class, args);}
}
2. postman
2.1 postman简介
Postman 是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。
作用常用于进行接口测试
2.2 postman安装
下方为安装链接
Postman API Platform | Sign Up for Free
3. 请求
3.1 简单参数
原始方式
在原始的web程序中获取请求参数需要通过HttpServletRequest 对象手动获取。
比较繁琐需要手动的类型转换
RestController
public class RequestController {RequestMapping(/simpleParam)public String simpleParam(HttpServletRequest request) {String name request.getParameter(name);String age request.getParameter(age);int intAge Integer.parseInt(age);System.out.println(name - age);return ok;}
}springboot方式
简单参数参数名与形参变量名相同定义形参即可接收参数。
RestController
public class RequestController {RequestMapping(/simpleParam)public String simpleParam(String name,Integer age) {System.out.println(name - age);return ok;}
}如果请求参数名不一致会出现什么结果呢
// 请求参数名不一致
RequestMapping(/simpleParam)
public String simpleParam(String username,Integer age) {System.out.println(username : age);return ok;
} 如果请求参数不一致如何请求成功呢
如果方法形参名称与请求参数名称不匹配可以使用RequestParam 完成映射
RequestMapping(/simpleParam)public String simpleParam(RequestParam(name name,required false)String username, Integer age) {System.out.println(username : age);return ok;}
注意
RequestParam 中的required 属性默认为true代表该请求参数必须传递如果不传递将报错。如果该参数是可选的可以将required属性设置为false。
小结
1. 原始方式获取请求参数
controller 方法形参中声明HttpServletRequest 对象
调用对象的getParameter(参数名)
2. SpringBoot 中接收简单参数
请求参数名与方法形参变量名相同
会自动进行类型转换
3. RequestParam注解
方法形参名称与请求参数名称不匹配通过该注解完成映射
该注解的required属性默认为true代表请求参数必须传递 3.2 实体参数
简单实体对象
请求参数名与形参对象属性名相同定义POJO接收即可
NoArgsConstructor
AllArgsConstructor
Data
public class User {private String name;private Integer age;
}
RequestMapping(/simplePojo)public String simplePojo(User user) {System.out.println(user);return ok;}
复杂实体对象
请求参数名与形参对象属性名相同按照对象层次结构关系即可接收嵌套POJO属性参数。
AllArgsConstructor
NoArgsConstructor
Data
public class Address {private String province;private String city;
}
NoArgsConstructor
AllArgsConstructor
Data
public class User {private String name;private Integer age;private Address address;
}
RequestMapping(/simplePojo)public String simplePojo(User user) {System.out.println(user);return ok;}
小结
规则请求参数名与形参对象属性名相同即可直接通过POJO接收
3.3 数组集合参数
数组参数
请求参数名与形参数组名称相同且请求参数为多个定义数组类型形参即可传递参数
RequestMapping(/arrayParam)public String arrayParam(String[] hobby) {System.out.println(Arrays.toString(hobby));return OK;} 集合参数
请求参数名与形参集合名称相同且请求参数为多个RequestParam 绑定参数关系
RequestMapping(/listParam)public String listParam(RequestParam ListString hobby) {System.out.println(hobby);return OK;} 小结
数组请求参数名与形参中数组变量名相同可以直接使用数组封装
集合请求参数名与形参中集合变量名相同通过RequestParam 绑定参数关系
3.4 日期时间参数
日期参数使用 DateTimeFormat 注解完成日期参数格式转换
RequestMapping(/dateParam)public String dateParam(DateTimeFormat(pattern yyyy-MM-dd HH:mm:ss) LocalDateTime updateTime) {System.out.println(updateTime);return OK;}
3.5 JSON参数
JSON参数JSON数据键名与形参对象属性名相同定义POJO类型形参即可接收参数需要使用RequestBody 标识
{name:ITCAST,age:16,address:{province:山西,city:晋中}
}
RequestMapping(/jsonParam)public String jsonParam(RequestBody User user) {System.out.println(user);return OK;}
3.6 路径参数
路径参数通过请求URL直接传递参数使用{...}来标识该路径参数需要使用 PathVariable 获取路径参数
传递一个参数
RequestMapping(/path/{id})public String pathParam(PathVariable Integer id) {System.out.println(id);return OK;}
传递多个参数
RequestMapping(/path/{id}/{name})public String pathParam(PathVariable Integer id,PathVariable String name) {System.out.println(id);System.out.println(name);return OK;}
3.7 总结
简单参数
定义方法形参请求参数名与形参变量名一致。
如果不一致通过RequstParam 手动映射。
实体参数
请求参数名与实体对象的属性名一致会自动接收封装
数组集合参数
数组请求参数名与数组名一致直接封装
集合请求参数名与集合名一致RequestParam 绑定关系
日期参数
DateTimeFormat
JSON参数
RequestBody
路径参数
PathVariable 4. 响应
注解解释
4.1 ResponceBody
类型方法注解、类注解
位置Controller方法上/类上
作用将方法返回值直接响应如果返回值类型是 实体对象/集合将会转换为JSON格式响应
说明RestController Controller ResponseBody
Target(ElementType.TYPE)
Retention(RetentionPolicy.RUNTIME)
Documented
Controller
ResponseBody
public interface RestController {/*** The value may indicate a suggestion for a logical component name,* to be turned into a Spring bean in case of an autodetected component.* return the suggested component name, if any (or empty String otherwise)* since 4.0.1*/AliasFor(annotation Controller.class)String value() default ;}
4.2 演示案例
RequestMapping(hello)public String hello() {System.out.println(Hello World);return Hello World;} RequestMapping(/getAddr)public Address getAddr() {Address addr new Address();addr.setProvince(浙江);addr.setCity(杭州);return addr;} RequestMapping(listAddr)public ListAddress listAddr() {ArrayListAddress list new ArrayList();Address addr new Address();addr.setProvince(广东);addr.setCity(深圳);Address addr2 new Address();addr2.setProvince(山西);addr2.setCity(太原);list.add(addr);list.add(addr2);return list;} 4.3 通一规范
NoArgsConstructor
AllArgsConstructor
Data
public class Result {private Integer code; // 1 成功0失败private String msg; // 提示信息private Object data; // 数据datapublic static Result success(Object data) {return new Result(1,success,data);}public static Result success() {return new Result(1,success,null);}public static Result error(String msg) {return new Result(0,msg,null);}
}
改造原始代码 RequestMapping(hello)public Result hello() {System.out.println(Hello World);return Result.success(Hello World);}RequestMapping(/getAddr)public Result getAddr() {Address addr new Address();addr.setProvince(浙江);addr.setCity(杭州);return Result.success(addr);}RequestMapping(listAddr)public Result listAddr() {ArrayListAddress list new ArrayList();Address addr new Address();addr.setProvince(广东);addr.setCity(深圳);Address addr2 new Address();addr2.setProvince(山西);addr2.setCity(太原);list.add(addr);list.add(addr2);return Result.success(list);}
4.4 小结
1. ResponseBody
位置Controller类上/方法上
作用将方法返回值直接响应若返回值类型是 实体对象/集合转JSON格式响应
2. 通一响应结果
Result(code、msg、data)
5. 分层解耦 - 三层架构
5.1 三层架构
1. controller控制层接收前端发送的请求对请求进行处理并响应数据。
2. service业务逻辑层处理具体的业务逻辑。
3. dao数据访问层(Data Access Object)(持久层)负责数据访问操作包括数据的增、删、改、查。 5.2 分层解耦
内聚软件中各个功能模块内部的功能联系
耦合衡量软件中各个层/模块之间的依赖、关联的程度。
软件设计原则高内聚低耦合。 控制反转Inversion Of Control简称IOC。对象的创建控制权由程序自身转移到外部(容器)这种思想称为控制反转。
依赖注入Dependency Injection简称DI。容器为应用程序提供运行时所依赖的资源称之为依赖注入。
Bean对象IOC容器中创建、管理的对象称之为bean。
5.3 IOCDI入门
步骤
1. Service层 及 Dao 层的实现类交给IOC容器管理。
2. 为Controller及Service注入运行时依赖的对象。
3. 运行测试。
Component // 将当前的类交给IOC容器管理成为IOC容器中的bean
AutoWired // 运行时IOC容器会提供该类型的bean对象并复制给改变量 - 依赖注入
5.4 IOC详解
bean 的声明
要把某个对象交给IOC容器管理需要在对应的类上加上如下注解之一 注意事项
声明bean的时候可以通过value属性指定bean的名字如果没有指定默认为类名首字母小写。
使用以上四个注解都可以声明bean但是在springboot继承web开发中声明控制器bean只能用Controller
bean组件扫描
前面的bean的四大注解要想生效还需要被组件扫描注解ComponentScan扫描。
ComponentScan 注解虽然没有显示配置但是实际上已经包含在了启动类声明注解 SpringBootApplication中默认扫描的范围是启动类所在的包及其自包。
5.5 DI详解
依赖注入
AutoWired注解默认是按照类型进行如果存在多个相同类型的bean将会报出如下错误 解决方式 Resource 与 Autowired区别
Autowired 是spring框架提供的注解而Resource 是JDK提供的注解。
Autowired 默认是按照类型注入而Resource 默认是按照名称注入。