前言
记录时间:2023.3.27
已坚持的第二十九天
java从入门到精通
学习java时间历程记录打卡
早上7:00到 12:00
下午2:00到 5:00
JavaWeb-SpringBootWeb请求响应总结
完成代码练习
1.目录结构
1.controller控制类
package cn.vqqc.controller;
import cn.vqqc.pojo.Emp;
import cn.vqqc.pojo.Result;
import cn.vqqc.service.EmpService;
import cn.vqqc.utils.XmlParserUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//import javax.annotation.Resource;
import java.util.List;
@RestController
public class EmpController {
//
// @Qualifier("empServiceA")
// @Autowired //运行时, IOC容器会提供该类型的bean对象,并赋值给该变量 - 依赖注入
// private EmpService empService ;
private EmpService empService ;
@RequestMapping("/listEmp")
public Result list(){
//1. 调用service, 获取数据
List<Emp> empList = empService.listEmp();
//3. 响应数据
return Result.success(empList);
}
//
// @RequestMapping("/listEmp")
// public Result list(){
// //1. 加载并解析emp.xml
// String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
// System.out.println(file);
// List<Emp> empList = XmlParserUtils.parse(file, Emp.class);
//
// //2. 对数据进行转换处理 - gender, job
// empList.stream().forEach(emp -> {
// //处理 gender 1: 男, 2: 女
// String gender = emp.getGender();
// if("1".equals(gender)){
// emp.setGender("男");
// }else if("2".equals(gender)){
// emp.setGender("女");
// }
//
// //处理job - 1: 讲师, 2: 班主任 , 3: 就业指导
// String job = emp.getJob();
// if("1".equals(job)){
// emp.setJob("讲师");
// }else if("2".equals(job)){
// emp.setJob("班主任");
// }else if("3".equals(job)){
// emp.setJob("就业指导");
// }
// });
//
// //3. 响应数据
// return Result.success(empList);
// }
//
}
package cn.vqqc.controller;
import cn.vqqc.pojo.User;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
//import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
/**
* 测试请求参数接收
*/
@RestController
//@Controller
//@ResponseBody
public class RequestController {
//1. 简单参数
//原始方式
// @RequestMapping("/simpleParam")
// 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("/simpleParam")
// public String simpleParam(String name, Integer age){
// System.out.println(name+ ":" + age);
// return "OK";
// }
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name = "name", required = false) String username, Integer age){
System.out.println(username+ ":" + age);
return "OK";
}
//2. 实体参数
@RequestMapping("/simplePojo")
public String simplePojo(User user){
System.out.println(user);
return "OK";
}
@RequestMapping("/complexPojo")
public String complexPojo(User user){
System.out.println(user);
return "OK";
}
//3. 数组集合参数
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby){
System.out.println(Arrays.toString(hobby));
return "OK";
}
@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby){
System.out.println(hobby);
return "OK";
}
//4. 日期时间参数
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
System.out.println(updateTime);
return "OK";
}
//5. json参数
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){
System.out.println(user);
return "OK";
}
//6. 路径参数
@RequestMapping("/path/{id}")
public String pathParam(@PathVariable Integer id){
System.out.println(id);
return "OK";
}
@RequestMapping("/path/{id}/{name}")
public String pathParam2(@PathVariable Integer id , @PathVariable String name){
System.out.println(id);
System.out.println(name);
return "OK";
}
}
package cn.vqqc.controller;
import cn.vqqc.pojo.Address;
import cn.vqqc.pojo.Result;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
* 测试响应数据
*/
@RestController
public class ResponseController {
/*@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 List<Address> listAddr(){
List<Address> 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;
}*/
@RequestMapping("/hello")
public Result hello(){
System.out.println("Hello World ~");
//return new Result(1,"success","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(){
List<Address> 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);
}
}
2.三层结构:dao数据访问类
package cn.vqqc.dao.impl;
import cn.vqqc.dao.EmpDao;
import cn.vqqc.pojo.Emp;
import cn.vqqc.utils.XmlParserUtils;
import org.springframework.stereotype.Repository;
import java.util.List;
//@Component //将当前类交给IOC容器管理, 成为IOC容器中的bean
@Repository//("daoA")
public class EmpDaoA implements EmpDao {
@Override
public List<Emp> listEmp() {
//1. 加载并解析emp.xml
String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
System.out.println(file);
List<Emp> empList = XmlParserUtils.parse(file, Emp.class);
return empList;
}
}
1.定义接口
package cn.vqqc.dao;
import cn.vqqc.pojo.Emp;
import java.util.List;
public interface EmpDao {
//获取员工列表数据
public List<Emp> listEmp();
}
3.pojo定义类
package cn.vqqc.pojo;
public class Address {
private String province;
private String city;
@Override
public String toString() {
return "Address{" +
"province='" + province + '\'' +
", city='" + city + '\'' +
'}';
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
package cn.vqqc.pojo;
public class Emp {
private String name;
private Integer age;
private String image;
private String gender;
private String job;
public Emp() {
}
public Emp(String name, Integer age, String image, String gender, String job) {
this.name = name;
this.age = age;
this.image = image;
this.gender = gender;
this.job = job;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
@Override
public String toString() {
return "Emp{" +
"name='" + name + '\'' +
", age=" + age +
", image='" + image + '\'' +
", gender='" + gender + '\'' +
", job='" + job + '\'' +
'}';
}
}
package cn.vqqc.pojo;
/**
* 统一响应结果封装类
*/
public class Result {
private Integer code ;//1 成功 , 0 失败
private String msg; //提示信息
private Object data; //数据 date
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 +
'}';
}
}
package cn.vqqc.pojo;
public class User {
private String name;
private Integer age;
private Address address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", address=" + address +
'}';
}
}
4.service数据类
package cn.vqqc.service.impl;
import cn.vqqc.dao.EmpDao;
import cn.vqqc.pojo.Emp;
import cn.vqqc.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.util.List;
@Primary
//@Component //将当前类交给IOC容器管理, 成为IOC容器中的bean
@Service
public class EmpServiceA implements EmpService {
@Autowired //运行时, IOC容器会提供该类型的bean对象,并赋值给该变量 - 依赖注入
private EmpDao empDao;
@Override
public List<Emp> listEmp() {
//1. 调用dao, 获取数据
List<Emp> empList = empDao.listEmp();
//2. 对数据进行转换处理 - gender, job
empList.stream().forEach(emp -> {
//处理 gender 1: 男, 2: 女
String gender = emp.getGender();
if("1".equals(gender)){
emp.setGender("男");
}else if("2".equals(gender)){
emp.setGender("女");
}
//处理job - 1: 讲师, 2: 班主任 , 3: 就业指导
String job = emp.getJob();
if("1".equals(job)){
emp.setJob("讲师");
}else if("2".equals(job)){
emp.setJob("班主任");
}else if("3".equals(job)){
emp.setJob("就业指导");
}
});
return empList;
}
}
package cn.vqqc.service.impl;
import cn.vqqc.dao.EmpDao;
import cn.vqqc.pojo.Emp;
import cn.vqqc.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.util.List;
//@Component //将当前类交给IOC容器管理, 成为IOC容器中的bean
@Service
public class EmpServiceB implements EmpService {
@Autowired //运行时, IOC容器会提供该类型的bean对象,并赋值给该变量 - 依赖注入
private EmpDao empDao;
@Override
public List<Emp> listEmp() {
//1. 调用dao, 获取数据
List<Emp> empList = empDao.listEmp();
//2. 对数据进行转换处理 - gender, job
empList.stream().forEach(emp -> {
//处理 gender 1: 男, 2: 女
String gender = emp.getGender();
if("1".equals(gender)){
emp.setGender("男士");
}else if("2".equals(gender)){
emp.setGender("女士");
}
//处理job - 1: 讲师, 2: 班主任 , 3: 就业指导
String job = emp.getJob();
if("1".equals(job)){
emp.setJob("讲师");
}else if("2".equals(job)){
emp.setJob("班主任");
}else if("3".equals(job)){
emp.setJob("就业指导");
}
});
return empList;
}
}
1.定义接口
package cn.vqqc.service;
import cn.vqqc.pojo.Emp;
import java.util.List;
public interface EmpService {
//获取员工列表
public List<Emp> listEmp();
}
5.工具类
package cn.vqqc.utils;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class XmlParserUtils {
public static <T> List<T> parse(String file , Class<T> targetClass) {
ArrayList<T> list = new ArrayList<T>(); //封装解析出来的数据
try {
//1.获取一个解析器对象
SAXReader saxReader = new SAXReader();
//2.利用解析器把xml文件加载到内存中,并返回一个文档对象
Document document = saxReader.read(new File(file));
//3.获取到根标签
Element rootElement = document.getRootElement();
//4.通过根标签来获取 user 标签
List<Element> elements = rootElement.elements("emp");
//5.遍历集合,得到每一个 user 标签
for (Element element : elements) {
//获取 name 属性
String name = element.element("name").getText();
//获取 age 属性
String age = element.element("age").getText();
//获取 image 属性
String image = element.element("image").getText();
//获取 gender 属性
String gender = element.element("gender").getText();
//获取 job 属性
String job = element.element("job").getText();
//组装数据
Constructor<T> constructor = targetClass.getDeclaredConstructor(String.class, Integer.class, String.class, String.class, String.class);
constructor.setAccessible(true);
T object = constructor.newInstance(name, Integer.parseInt(age), image, gender, job);
list.add(object);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}
6.启动类
package cn.vqqc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
//@ComponentScan({"com.vqqc.dao","com.vqqc"})
@SpringBootApplication //默认扫描当前包及其子包
public class SpringbootWebReqRespApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootWebReqRespApplication.class, args);
}
}
7.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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.vqqc</groupId>
<artifactId>springboot-web-req-resp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-web-req-resp</name>
<description>springboot-web-req-resp</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 解析XML -->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
视频总结
1. 请求响应-概述
https://www.bilibili.com/video/BV1m84y1w7Tb/?p=67
2. 请求响应-请求-postman工具
https://www.bilibili.com/video/BV1m84y1w7Tb/?p=68
3. 请求响应-请求-简单参数&实体参数
https://www.bilibili.com/video/BV1m84y1w7Tb/?p=69
4. 请求响应-请求-数组集合参数
https://www.bilibili.com/video/BV1m84y1w7Tb/?p=70
5. 请求响应-请求-日期参数&json参数
https://www.bilibili.com/video/BV1m84y1w7Tb/?p=71
6. 请求响应-请求-路径参数
https://www.bilibili.com/video/BV1m84y1w7Tb/?p=72
7. 请求响应-响应-@ResponseBody&统一响应结果
https://www.bilibili.com/video/BV1m84y1w7Tb/?p=73
8. 请求响应-响应-案例
https://www.bilibili.com/video/BV1m84y1w7Tb/?p=74
9. 分层解耦-三层架构
https://www.bilibili.com/video/BV1m84y1w7Tb/?p=75
10. 分层解耦-分层解耦(IOC-DI引入)
https://www.bilibili.com/video/BV1m84y1w7Tb/?p=76
11. 分层解耦-IOC&DI-入门
https://www.bilibili.com/video/BV1m84y1w7Tb/?p=77
12. 分层解耦-IOC&DI-IOC详解
https://www.bilibili.com/video/BV1m84y1w7Tb/?p=78
13. 分层解耦-IOC&DI-DI详解
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容