前言
通过上文 我们实现了从学生列表执行:学生入驻审核,但通常审核都不是盲审,都需要打开学生详情页,查看学生基本信息,以及申请记录,再来审核!
另外还有一个点,学生列表可还包括审核通过的学生,也需要学生详情页,还包括像学生借阅记录等等,所以后端通常提供多个细粒度的API,方便前端的页面实现。
所以,本文我们实战两个接口:查看学生信息,以及查看学生申请记录,分别实现服务层、数据访问层、控制器层,,并把我们学习过的知识点串连应用起来,知识点包括:参数校验Validation、管理员权限校验、API接口定义、Mybatis查询、拷贝工具类等。
一、编写服务层
代码语言:javascript复制StudentService方法定义 (其它方法省略了):
public interface StudentService {
/**
* 获取学生信息(根据学生id)
* @param studentId 学生id
* **/
StudentBO getStudentById(Integer studentId);
/**
* 获取学生申请借阅证记录
* @param studentId 学生id
* **/
List<QualificationBO> getQualificationList(Integer studentId);
}
看注释足够清楚了~
1. 获取学生信息(根据学生id)
代码语言:javascript复制代码如下,通过
selectByPrimaryKey
获取学生信息,最后通过CopyUtils.copy
拷贝到StudentBO
@Override
public StudentBO getStudentById(Integer studentId) {
Student po = studentMapper.selectByPrimaryKey(studentId);
return CopyUtils.copy(po, StudentBO::new);
}
2. 获取学生申请借阅证记录
代码语言:javascript复制代码如下,我这里使用
selectByExample
查询所有字段,当然你也可以使用XML
方式,最后通过CopyUtils.copyList
拷贝到QualificationBO
@Override
public List<QualificationBO> getQualificationList(Integer studentId) {
QualificationExample example = new QualificationExample();
example.createCriteria().andStudentIdEqualTo(studentId);
List<Qualification> qualificationList = qualificationMapper.selectByExample(example);
return CopyUtils.copyList(qualificationList, QualificationBO::new);
}
QualificationBO 定义如下:
代码语言:javascript复制@Data
public class QualificationBO implements Serializable {
private Integer id;
private Integer studentId;
private Integer status;
private Date verifyTime;
private Integer verifyUserId;
private String rejectReason;
private Date gmtCreate;
private Date gmtModified;
}
二、编写控制器
代码语言:javascript复制StudentController接口定义 (其它方法省略了):
@Role
@GetMapping("/id")
public TgResult<StudentBO> getStudentById(@Min(value = 1, message = "id必须大于0") @RequestParam("studentId") Integer studentId) {
StudentBO studentBO = studentService.getStudentById(studentId);
return TgResult.ok(studentBO);
}
@Role
@GetMapping("/qualification/list")
public TgResult getStudentQualificationList(@Min(value = 1, message = "id必须大于0") @RequestParam("studentId") Integer studentId) {
List<QualificationBO> qualificationList = studentService.getQualificationList(studentId);
return TgResult.ok(qualificationList);
}
说明如下:
- @Role注解
是我们自定义的注解,用于管理员权限校验,当不是管理员调用该API时,会返回
403 无权限
。 共通过两种方式实现:
- 通过
拦截器Interceptor
的实现:7.5 SpringBoot 拦截器Interceptor实战 统一角色权限校验 - 通过
@Aspect
AOP实现:7.6 SpringBoot AOP实战 统一角色权限校验 - @GetMapping(“/id”)
GET请求的标准方式,加上Controller上的路径,完整接口路径为:
/student/id
- @GetMapping(“/qualification/list”)
GET请求的标准方式,加上Controller上的路径,完整接口路径为:
/student/qualification/list
- @Min(value = 1, message = “id必须大于0”)
Spring参数校验Validation,
@Min
最小值:7.13 在SpringBoot中 正确使用Validation实现参数效验
- TgResult
封装的统一返回结果 详见:2-2. SpringBoot API开发详解 --SpringMVC注解 封装结果 支持跨域 打包
三、PostMan测试
- getStudentById 根据学生id查询学生信息
/student/id?studentId=2
- getStudentQualificationList 查询学生的申请记录
/student/qualification/list?studentId=2
最后
看到这,觉得有帮助的,刷波666,感谢大家的支持~
想要看更多实战好文章,还是给大家推荐我的实战专栏–>《基于SpringBoot SpringCloud Vue前后端分离项目实战》,由我和 前端狗哥 合力打造的一款专栏,可以让你从0到1快速拥有企业级规范的项目实战经验!
具体的优势、规划、技术选型都可以在《开篇》试读!