用springboot架构制作一个学生管理系统
上一条博客是创建项目的
先搞登录令牌登录




搞完令牌登录之后的方法接口测试别忘了先获取令牌然后放到header里面不然得到的是???

这是搞动态查询的报错


这个全Param上一个项目是可以的,这个项目没搞定,换种方式动态查询,传对象不传单个字段(不搞分页情况下这是可以的)





给动态查询加个分页查询
PageBean 是用来封装分页结果(如总数、数据列表),而不是用来接收分页请求参数(如 page、pageSize、student 条件)。
这个@RequestParam和@RequestBody一起用是不对的,apifox能同时传,但是前端好像不行,或者是我的问题



前端发送的是 JSON 格式({page, pageSize, student}),但后端 Controller 方法参数写的是 @RequestParam int page, @RequestParam int pageSize, @RequestBody Student student,Spring 不能同时用 @RequestParam 和 @RequestBody 自动映射 JSON 里的参数。
controller这样写虽然在 Apifox 里可以用(因为 Apifox 能同时传 query param 和 body),但不推荐,原因如下:
不符合 RESTful 规范:POST 请求一般只用 @RequestBody,参数都放 body,或者全部用 @RequestParam 放 query/form,混用会让接口风格混乱。
前端调用不方便:大多数前端框架(如 axios、fetch)不支持 POST 时同时传 query param 和 body,实际开发中容易出错。
可维护性差:后续如果参数多了,接口扩展和文档维护都不方便。
结论: 虽然 Spring 支持这样写,但实际开发和团队协作中建议用 @RequestBody 统一接收参数(用 VO 或 Map),这样前后端都更规范、易维护。 如果你只是自己用 Apifox 测试,这样写没问题。但如果要对接前端,建议改成只用 @RequestBody。
可以换成以下更专业的方法
查询参数用 VO(如 StudentQueryVO)接收。
查询结果用 PageBean 返回。







搞个全局异常处理器

加个动态增加



注意oracle的字段如果设置了chat(20),那这个字段如果你存数据的时候只存了“123”,那数据库数据后面就会默认给你补上17个空格,然后如果刚好是主键id出现这种补空格的情况,那你就永远无法通过主键id去修改这条数据。
动态修改



加个批量删除



加个事务的删除班级及其学生



搞个自定义注解 AOP记录增删改的操作






搞个aop环绕通知更方便控制台看方法执行过程

拦截器会拦截所有静态资源包括静态页面文件,加个

登录页面的逻辑,登录之后获取存储token,然后其他页面也要获取token然后当请求头请求方法。
token 存储位置 登录成功后,前端把 token 保存在 localStorage(浏览器本地存储),不是保存在拦截器里。
localStorage 特点
同一域名下所有页面都能访问 localStorage 里的 token。
页面跳转不会导致 token 丢失。
axios 拦截器作用
注册拦截器后,每次用 axios 发请求时,会自动从 localStorage 取 token 并加到请求头,后端才能获取到。
如果页面没注册拦截器,axios 请求不会自动带 token,后端校验会失败。
页面与 token 的关系
只要 token 在 localStorage,任意页面都能用 JS 代码 localStorage.getItem('token') 取到。
但只有注册了 axios 拦截器,axios 请求才会自动带 token。
总结
直接用 JS 获取 token:不需要拦截器。
axios 请求自动带 token:必须注册拦截器。
index.html 没有请求接口,不需要注册拦截器。
需要请求接口的页面(如 student.html)必须注册拦截器。





浙公网安备 33010602011771号