WEB应用技术第六次作业
一、复现上课的案例 springboot的请求和响应一请求1.接收简单参数定义simpleParam接口方法形参请求参数名GetMapping只接收GET请求在GET请求Params标签里填写请求参数并赋值RequestMapping可以接收各种请求形参名和请求参数名一致GetMapping(/simpleParam) public String simpleParam(String name , Integer age ){//形参名和请求参数名保持一致 System.out.println(name : age); return OK; }终端返回形参名和请求参数名不一致GetMapping(/simpleParam1) public String simpleParam1(String username , Integer age ){//形参名和请求参数名不一致 System.out.println(username : age); return OK; }不一致时通过RequestParam注解完成映射不返回null。该注解的required属性默认为true请求参数必须有赋值GetMapping(/simpleParam1) public String simpleParam1(RequestParam(namename)String username , Integer age){//形参名和请求参数名不一致 System.out.println(username : age); return OK; }2.实体参数:简单实体对象简单参数只适用于请求参数个数少的情况有几个请求参数就需要定义几个形参参数多需要用实体参数即将所有请求参数封装到一个实体类中并保证请求参数名与实体类的属性名保持一致。在com.example.chapter2.pojo包下创建User.java实体类存在两种编写实现方式方案 1引入 Lombok 注解简化开发package com.example.chapter2.pojo; import lombok.*;Data NoArgsConstructor AllArgsConstructor public class User { private String name; private Integer age; private Address address; }前置条件项目 pom.xml 文件导入 lombok 依赖IDE 安装 Lombok 插件否则注解失效爆红核心注解及作用Data自动生成全部属性的 get/set 方法、toString ()、equals ()、hashCode ()替代手动编写存取方法NoArgsConstructor:自动生成无参构造方法Spring 反射实例化实体对象必须依赖AllArgsConstructor自动生成包含全部属性的全参构造方法用于手动创建实体对象非 Spring 强制要求方案 2原生 Java 手写实现不使用 Lombokpackage com.example.chapter2.pojo; import com.example.chapter2.pojo.Address; public class User { // 成员属性 private String name; private Integer age; private Address address; // 1. 无参构造【Spring封装参数强制必须写】 public User() { } // 2. 全参构造对应AllArgsConstructor可选自己创建对象用 public User(String name, Integer age, Address address) { this.name name; this.age age; this.address address; } // 3. 全部属性的 Getter Setter【Spring赋值必须依赖set方法】 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; } // 4. toString()【可选调试打印对象方便不加只会打印内存地址】 Override public String toString() { return User{ name name \ , age age , address address }; } }强制必写内容缺少会导致参数接收失败 ① 无参构造方法Spring 封装参数时必须调用仅写有参构造会直接报错 ② 全部成员变量对应的 Getter、Setter 方法Spring 通过反射调用 set 方法为属性赋值无 set 方法则属性值恒为 null可选补充内容重写toString方法控制台打印实体对象时可直观查看内部参数值方便调试全参构造方法仅用于业务手动创建对象不影响接口参数接收。3.实体参数复杂实体对象User类中有⼀个Address类型的属性Address是⼀个实体类按照结构参差写除了User类再写一个Address类NoArgsConstructor AllArgsConstructor public class Address { private String province; private String city; }请求参数需要写address.province而不是province4.数组集合参数数组请求参数名与形参数组名称相同请求参数为多个RequestMapping(/arrayParam) public String arrayParam(String[] hobby){ System.out.println(Arrays.toString(hobby)); return OK; }集合请求参数名与形参集合对象名相同且请求参数为多个要加RequestParam注解绑定参数关系数组是Java原生可直接实例化的数据结构Spring能够自动识别数组类型可直接将请求中重复的同名参数封装至数组无需添加注解。而List属于接口无法直接创建对象若将List作为独立方法形参且不加RequestParam注解Spring会误将其当作普通实体类尝试实例化接口程序运行报错。添加RequestParam注解后可提示Spring该集合用于接收URL多值参数框架会自动生成ArrayList实例完成参数封装。RequestMapping(/listParam) public String listParam(RequestParam ListString hobby){ System.out.println(hobby); return OK; }5.日期参数使用DateTimeFormat注解完成日期参数格式转换RequestMapping(/dateParam) public String dateParam(DateTimeFormat(pattern yyyy-MM-dd HH:mm:ss) LocalDateTime updateTime){ System.out.println(updateTime); return OK; }6.json参数JSON数据键名与形参对象属性名相同定义POJO类型的形参用来接收参数需要使用RequestsBody注解。RequestMapping(/jsonParam) public String jsonParam(RequestBody User user){ System.out.println(user); return OK; }7.路径参数通过请求URL直接传递函数使用{…}来标识该路径参数需要使用PathVariable来获取路径参数单个参数RequestMapping(/path/{id}) public String pathParam(PathVariable Integer id){ System.out.println(id); return OK; }获取动态路径参数id将id绑定给方法形参id多个参数RequestMapping(/path/{id}/{name}) public String pathParam(PathVariable Integer id,PathVariable String name){ System.out.println(id:name); return OK; } }二响应RestController public class RequestController {}ControllerResponseBodyResponseBody:将方法的返回值直接响应回去若方法返回值是对象或集合现将其转换为JSON再响应回去package com.example.chapter2.controller; import java.util.ArrayList; import java.util.List; import org.springframework.web.bind.annotation.*; import com.example.chapter2.pojo.Address; 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 ListAddress listAddr() { ListAddress 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; } }统一响应结果定义Result类package com.example.chapter2.pojo; public class Result { private Integer code;// 响应码1 代表成功; 0 代表失败 private String msg; // 响应码 描述字符串 private Object 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() { return new Result(1, success, null); } // 查询 成功响应(把查询结果做为返回数据响应给前端) public static Result success(Object data) { return new Result(1, success, data); } // 失败响应 public static Result error(String msg) { return new Result(0, msg, null); } }package com.example.chapter2.controller; import java.util.ArrayList; import java.util.List; import org.springframework.web.bind.annotation.RestController; import com.example.chapter2.pojo.Address; import com.example.chapter2.pojo.Result; import org.springframework.web.bind.annotation.RequestMapping; RestController public class ResponseController1 { RequestMapping(/hello1) public Result hello() { System.out.println(Hello World ~); // return new Result(1,success,Hello World111 ~); return Result.success(Hello World111 ~); } // 响应统一格式的结果 RequestMapping(/getAddr1) public Result getAddr() { Address addr new Address(); addr.setProvince(广东1); addr.setCity(深圳1); return Result.success(addr); } // 响应统一格式的结果 RequestMapping(/listAddr1) public Result listAddr() { ListAddress list new ArrayList(); Address addr new Address(); addr.setProvince(广东1); addr.setCity(深圳1); Address addr2 new Address(); addr2.setProvince(陕西1); addr2.setCity(西安1); list.add(addr); list.add(addr2); return Result.success(list); } }整体框架三案例复现二、开始学习element把员工信息列表展示的页面的表格样式从“带斑马纹表格”改成“基础表格”样式并且只占窗口的60%。stripe属性可以创建带斑马纹的表格。它接受一个Boolean默认为false设置为true即为启用body h1 aligncenter员工信息列表展示/h1 div idapp el-table :datatableData stylewidth: 60%;margin:0 auto;border el-table-column propname label姓名 aligncenter min-width12%/el-table-column el-table-column propage label年龄 aligncenter min-width12%/el-table-column el-table-column label图像 aligncenter min-width20% template slot-scopescope el-image :srcscope.row.image stylewidth: 80%; height: 50px;/el-image /template /el-table-column el-table-column propgender label性别 aligncenter min-width12%/el-table-column el-table-column propjob label职位 aligncenter min-width12%/el-table-column /el-table /div /body style .el-table .warning-row { background: oldlace; } .el-table .success-row { background: #f0f9eb; } /style