2022.06.29
D:\A-File\技术\JAVA\尚硅谷硅谷课堂项目
工程目录结构
讲师管理接口
后台管理系统-讲师管理接口
查询和删除
查询所有讲师、删除讲师
/**
* 讲师 前端控制器
* @author atguigu
*/
@RestController
@RequestMapping(value="/admin/vod/teacher")
public class TeacherController {
@Autowired
private TeacherService teacherService;
//查询所有讲师列表
@GetMapping("findAll")
public List<Teacher> findAll(){
List<Teacher> list = teacherService.list();
return list;
}
//删除讲师
@DeleteMapping("remove/{id}")
public boolean removeById(@PathVariable String id){
return teacherService.removeById(id);
}
}
测试删除接口
删除讲师接口是delete提交方式,使用浏览器无法直接访问测试,可以通过工具测试,比如Postman,我们这里通过整合Swagger2进行接口测试
前后端分离开发模式中,api文档是最好的沟通方式。Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。及时性 (接口变更后,能够及时准确地通知相关前后端开发人员)规范性 (并且保证接口的规范性,如接口的地址,请求方式,参数及响应格式和错误信息)一致性 (接口信息一致,不会出现因开发人员拿到的文档版本不一致,而出现分歧)可测性 (直接在接口文档上进行测试,以方便理解业务)
统一返回结果对象
项目中我们会将响应封装成json返回,一般我们会将所有接口的数据格式统一, 使前端(iOS Android, Web)对数据的操作更一致、轻松。
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 全局统一返回结果类
*
*/
@Data
@ApiModel(value = "全局统一返回结果")
public class Result<T> {
@ApiModelProperty(value = "返回码")
private Integer code;
@ApiModelProperty(value = "返回消息")
private String message;
@ApiModelProperty(value = "返回数据")
private T data;
public Result(){}
public static <T> Result<T> build(T body, Integer code, String message) {
Result<T> result = new Result<T>();
if (body != null) {
result.setData(body);
}
result.setCode(code);
result.setMessage(message);
return result;
}
public static<T> Result<T> ok(){
return Result.ok(null);
}
/**
* 操作成功
* @param data baseCategory1List
* @param <T>
* @return
*/
public static<T> Result<T> ok(T data){
return build(data,200,"成功");
}
public static<T> Result<T> fail(){
return Result.fail(null);
}
/**
* 操作失败
* @param data
* @param <T>
* @return
*/
public static<T> Result<T> fail(T data){
return build(data, 201,"失败");
}
public Result<T> message(String msg){
this.setMessage(msg);
return this;
}
public Result<T> code(Integer code){
this.setCode(code);
return this;
}
}
了解:泛型,Data注解,json的对象和数组两种格式
@Api(tags = "讲师管理接口")
@RestController
@RequestMapping(value="/admin/vod/teacher")
public class TeacherController {
@Autowired
private TeacherService teacherService;
// http://localhost:8301/admin/vod/teacher/findAll
//1 查询所有讲师
@ApiOperation("查询所有讲师")
@GetMapping("findAll")
public Result findAllTeacher() {
//调用service方法
List<Teacher> list = teacherService.list();
return Result.ok(list).message("查询数据成功");
}
// remove/1
//2 逻辑删除讲师
@ApiOperation("逻辑删除讲师")
@DeleteMapping("remove/{id}")
public Result removeTeacher(@ApiParam(name = "id", value = "ID", required = true)
@PathVariable Long id) {
boolean isSuccess = teacherService.removeById(id);
if(isSuccess) {
return Result.ok(null);
} else {
return Result.fail(null);
}
}
}
分页条件查询讲师
/**
* 配置类
*/
@Configuration
@MapperScan("com.atguigu.ggkt.vod.mapper")
public class VodConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
///////////////////////
//创建查询条件对象
@Data
public class TeacherQueryVo {
@ApiModelProperty(value = "讲师姓名")
private String name;
@ApiModelProperty(value = "头衔 1高级讲师 2首席讲师")
private Integer level;
@ApiModelProperty(value = "入驻时间")
private String joinDateBegin;
@ApiModelProperty(value = "入驻时间")
private String joinDateEnd;
}
///////////////////////
//条件查询分页列表
@ApiOperation(value = "获取分页列表")
@PostMapping("{page}/{limit}")
public Result index(
@ApiParam(name = "page", value = "当前页码", required = true)
@PathVariable Long page,
@ApiParam(name = "limit", value = "每页记录数", required = true)
@PathVariable Long limit,
@ApiParam(name = "teacherVo", value = "查询对象", required = false)
@RequestBody(required = false) TeacherQueryVo teacherQueryVo) {
//创建page对象,传递当前页和每页记录数
Page<Teacher> pageParam = new Page<>(page, limit);
//获取条件值
String name = teacherQueryVo.getName();//讲师名称
Integer level = teacherQueryVo.getLevel();//讲师级别
String joinDateBegin = teacherQueryVo.getJoinDateBegin();//开始时间
String joinDateEnd = teacherQueryVo.getJoinDateEnd();//结束时间
//封装条件
QueryWrapper<Teacher> wrapper = new QueryWrapper<>();
if(!StringUtils.isEmpty(name)) {
wrapper.like("name",name);
}
if(!StringUtils.isEmpty(level)) {
wrapper.eq("level",level);
}
if(!StringUtils.isEmpty(joinDateBegin)) {
wrapper.ge("join_date",joinDateBegin);
}
if(!StringUtils.isEmpty(joinDateEnd)) {
wrapper.le("join_date",joinDateEnd);
}
//调用方法得到分页查询结果
IPage<Teacher> pageModel = teacherService.page(pageParam, wrapper);
return Result.ok(pageModel);
}
修改讲师
//编写id查询方法
@ApiOperation(value = "获取")
@GetMapping("get/{id}")
public Result get(@PathVariable Long id) {
Teacher teacher = teacherService.getById(id);
return Result.ok(teacher);
}
//编写修改方法
@ApiOperation(value = "修改")
@PutMapping("update")
public Result updateById(@RequestBody Teacher teacher) {
teacherService.updateById(teacher);
return Result.ok(null);
}
批量删
@ApiOperation(value = "根据id列表删除")
@DeleteMapping("batchRemove")
//传入json的数组格式,如[1,2]
public Result batchRemove(@RequestBody List<Long> idList) {
teacherService.removeByIds(idList);
return Result.ok(null);
}
统一异常处理(全局)
前端
VSCode 输入 !会出现基本代码块