目录
浏览器(带参数数据)请求web服务器,web服务器通过匹配请求路径,获得数据,并做出响应。该响应在浏览器中展示
问题一:数据如何从浏览器到服务器(请求:实体/简单/路径/数组/JSON/时间参数)
问题二:数据如何从服务器到浏览器(响应)---统一响应结果格式---实现接口(功能)
接口:****请求路径,响应数据,接收参数
下面这些都是注解:
(注解与反射机制:springboot核心)
@RequestMapping("/complex-para")
@RequestParam(name ="name")
@RestController
一:请求
(一)postman(接口测试工具)
直接下载安装
(二)简单参数
1.get方式
(1)原始方式
(2)springboot方式
public class ControlRequest {
@RequestMapping("/simplepara")
public String simplepara(String name,Integer age){
System.out.println(name+":"+age);
return "OK";
}
}
注意浏览器传递的参数名必须与方法里的形参名一致(name age)
如果不一致,需要注解:
2.post方式
(三)实体参数---(对象属性)
1.简单实体参数
@RestController
public class ControlRequest {
/*@RequestMapping("/simple-para")
public String simplepara(@RequestParam(name ="name") String username, Integer age){
System.out.println(username+":"+age);
return "OK";
}*/
@RequestMapping("/complex-para")
public String simplepara(User user){
System.out.println(user);
return "OK";
}
}
2.复杂实体参数----对象的属性还是一个对象
(四)数组集合参数
1.作用
(表单,一个属性有多个值)
(五)日期参数
日期形式
(六)JSON参数
json参数数据由对象接收,json数据的键必须和对象的属性名相同
注意:json数据的格式,大括号,键需要双引号包裹,如果键又对应一个对象,需要用花括号包裹(花括号对应对象数据)
(七)路径参数
作用:传参??传一个参数值给后台
1.单个路径参数
2.多个路径参数
二:响应
接口;请求路径,响应数据,接收参数
(一)ResponseBody
(二).响应规范化-----统一响应结果(数据+响应状态)
Result类
package com.ithema;
/**
* 统一响应结果封装类
*/
public class Result {
private Integer code ;//1 成功 , 0 失败
private String msg; //提示信息
private Object data; //数据 data
public Result() {
}
public Result(Integer code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public 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);
}
@Override
public String toString() {
return "Result{" +
"code=" + code +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
}
举例:
统一响应数据
对比未统一的
(三)案例
1.需求:
2.步骤
注意controller文件与其它文件必须都在com.ithema下,或者会找不到路径
3.编写Controller文件,处理请求,响应数据
重点: 请求路径 接收参数 响应数据
(1)请求路径 接收参数
axios没有要求参数,所以在Controller文件中也不需要参数
(2)响应数据
public Result list(){
// 1. 加载并解析emp.xml
String file=this.getClass().getClassLoader().getResource("emp.xml").getFile();
//获取根目录下emp.xml文件的动态路径
System.out.println(file);
List<Emp> empList = XmlParserUtils.parse(file, Emp.class);
//parse(x1,x2)第一个参数,要解析的文件,第二个参加,解析的格式
//调用XmlParserUtils工具包,解析file文件为Emp类,返回值为Emp类的列表
// 2. 对数据进行转换处理(1返回男,2返回女)
empList.stream().forEach(emp -> {
//对empList遍历
//处理<!-- 1: 男, 2: 女 -->
String gender= emp.getGender();
if (gender.equals("1")){
emp.setGender("男");
} else if (gender.equals("2")) {
emp.setGender("女");
}
//处理<!-- 1: 讲师, 2: 班主任 , 3: 就业指导 -->
String job= emp.getJob();
if (job.equals("1")){
emp.setJob("讲师");
} else if (job.equals("2")) {
emp.setJob("班主任");
} else if (job.equals("3")) {
emp.setJob("就业指导");
}
});
// 3. 响应数据
return Result.success(empList);
}
三:分层解耦
一个接口实现一个功能,尽可能降低接口的复杂性
(一):三层架构
上个例子,只用了一个接口就实现了
1.数据访问层--Dao
注意:不同数据的获取数据方法不同,因此我们设定一个Dao接口,再由一个接口类去实现Dao接口的方法(仅一个方法:获取数据)
Dao接口类的子类去具体实现获取数据的方法
// 1. 加载并解析emp.xml
String file=this.getClass().getClassLoader().getResource("emp.xml").getFile();
//获取根目录下emp.xml文件的动态路径
System.out.println(file);
List<Emp> empList = XmlParserUtils.parse(file, Emp.class);
//parse(x1,x2)第一个参数,要解析的文件,第二个参加,解析的格式
//调用XmlParserUtils工具包,解析file文件为Emp类,返回值为Emp类的列表
2.逻辑处理--Service
同Dao层,Service接口类+Service接口实现类(在实现类实现具体的逻辑推理,因为不同功能的逻辑推理不同,不能放在一个Service类里)
下面这样用
3.接收请求,响应数据--Controller
刷新,依旧展示,转换成功
拆分前后代码比较:
(二):分层解耦
1.耦合问题
2.解耦
在代码中就是删去new对象的过程
IOC容器中创建bean对象
ID过程将bean对象注入给下一层
(三):IOC&DI入门
注意:是对三层架构中层与层之间进行解耦
如果:某一层有多个实现类,用那个实现类,就对那个实现类进行@Component
(四):IOC详解
1.@Component衍生注解
2.bean的声明
3.组件扫描
因为只扫描启动类(Spring...Application)所在目录下的文件
(五):DI详解
依赖注入,是指IOC容器要为应用程序去提供运行时所依赖的资源,而资源指的就是对象
1.问题--多个bean对象,如何自动装配
2.解决方法
(1)@Primary
(2)@Qualifier
(3)@Resource
版权归原作者 leeyayai_xixihah 所有, 如有侵权,请联系我们删除。