闲谈&答辩阶段
这次实训主要是用Java 做一些应用型的项目.从8.26到9.11,说实话如果从0开始时间真的挺紧的,这次花了太多时间在设计架构上,头两天想的很好的实现思路,到头来还是来不及做(有个很重要的原因是答辩时间莫名其妙提前了两天,氵金)。
答辩第一个上,拿着完成70%的东西就上去了,反正演示避开bug就行=v=,上去看队友操作,我罚站五分钟,下台直接溜了,后来听队友说我们是最菜的。。。。。。
但是还是拿了优秀,奖品32GU盘。
其实上台奖的时候最明显的感受是,当时想的自以为比较好(相对于自身水平)的设计,可以在评委面前吹一吹的,其实评委根本不会太在意,而更多关注的是我们对业务的理解,昨天老师直接说,你们说的这些技术,我也不知道你们是不是真的实现了。。。。。。太真实了
唉,还是只把实训当作一个练手的机会吧,以下是这次的实训总结。
后端
主要用了spring boot + mybatis-plus,在IDEA中使用了JRebel、Lombok(dependency + plugin)这两个插件,挺爽的
mybatis-plus(-generator)
网上随便逛发现了这个东西,国产的。之前用mybatis-generator,不过实在不习惯看这么长的XML。mybatis-plus主要用的一个代码生成类,包括全局配置、策略、文件生成模板、继承类设置这些。而且这个可以一次生成Controller、service、Dao。
另外的区别是,查询构造器中,mybatis-plus使用了字符串匹配Column,mybatis-generator生成的是基于方法的,前者在数据表字段更改后修改代码比较方便,后者代码提示更舒服。
mybatis-plus利用BaseMapper + 泛型,所以虽然生成文件多,但是其中没有多少代码,扩展也挺方便的。
API
然后就是简单的CRUD了,定义了若干DTO、Param pojo类传递参数
然后使用统一Response类包装返回集,这里直接抄学长的代码,方便
然后是请求合法性验证,一个是token、一个是跨域
JWT
token验证我使用拦截器统一拦截,并除去固定path比如注册登录,看网上教程说通过excludePathPatterns可以除去路径,但是好像不起效果,所以我手动写了一个static String[]
跨域
前后端分离项目API必须要允许跨域,具体参考
Spring boot解决跨域问题
全局异常处理
之前看到有学长写的代码,对业务异常的做法是,一个异常声明一个单独的类,但是我觉得这样不是很便于维护。
对于具体的某一种异常,并没有需要扩展的东西,只需要知道错误消息和错误码就行了,对异常的处理会交给handler,作为业务异常的性质是相同的,所以感觉枚举类型更合适一点。
而且如果写成单独的类,那么在handler中进行捕捉又要写冗长的代码去捕捉每一种业务异常(虽说自定义异常都继承Exception或RuntimeException,可以直接捕捉Exception,不过这样的话没有把系统异常与未知异常同业务异常分开,也不是很好)。
参考网上给出的全局异常处理结构,首先定义ApiException类继承RuntimeException类:
这里的构造器接受一个枚举类型,这个枚举类型就是定义了可能出现的所有业务异常:
按照以上结构,在抛出ApiException异常时,构造器加上具体的异常类型就行了:
利用@ControllerAdvice
注解编写handler处理:
Others
另外还有用OSS上传图片视频、基于OAuth 的 支付宝授权,官方文档都写得挺详细,略过。
权限验证方面,就是把userId写进token,然后再controller方法中接收HttpServletRequest
对象,借用Util从中获取token请求头解析出userId。
前端
前端用Vue.js,加上饿了么的组件库,因为没时间做UI,直接仿 京东众筹 的布局了(后来才发现这个网站都没有webpack打包,早知道直接ctrl+s偷一手了=.=)
界面和样式主要是队友写的,从效果来看整体还可以,暴力定死整体content宽度也不存在适配问题。只是写组件的时候命名和结构不是很严谨,文件夹结构有点乱。
个人主要负责 axios封装 ,接通API(这个后面也来不及做了,很多API写了但是没用上),用async await解决回调地狱(好吧其实就这项目根本就没多少层回调嵌套)
Github 传送门: https://github.com/yylou15/ecfunds