配合React通用后台使用的一个小工具。
React通用后台要求后端接口必须符合特定的格式,比如查询接口必须是/api/xxx/select
、接口的返回必须是HTTP 200
等。如果每个项目接入的时候都从头写一遍,估计要崩溃了。。。所以我在想能不能减少一些重复的工作。
如果你的后端是java的(基于Spring),这个工具可以帮你快速生成一些模版类。把生成的类copy到自己的工程中并填写自己的逻辑,就可以直接使用通用后台提供的登录/CRUD/导入/导出等功能。
首先要按照React通用后台的要求写好querySchema和dataSchema文件,然后直接执行jar文件即可:
java -jar goos-1.1.0.jar [输入目录] [输出目录]
输入目录大概是这种结构:
foolbear:schema $ ls -lh
total 48
-rw-r--r-- 1 foolbear staff 377B 9 5 00:41 test.config.js // test表的配置文件
-rw-r--r-- 1 foolbear staff 1.5K 9 5 00:41 test.dataSchema.js // test表的dataSchema
-rw-r--r-- 1 foolbear staff 3.4K 9 5 00:41 test.querySchema.js // test表的querySchema
-rw-r--r-- 1 foolbear staff 133B 9 5 00:41 testSms.config.js // testSms表的配置文件
-rw-r--r-- 1 foolbear staff 547B 9 5 00:41 testSms.dataSchema.js
-rw-r--r-- 1 foolbear staff 762B 9 5 00:41 testSms.querySchema.js
输出目录的结构:
foolbear:output $ ls -lh -R
total 16
-rw-r--r-- 1 foolbear staff 2.1K 9 5 15:29 CommonResult.java // 通用工具类
-rw-r--r-- 1 foolbear staff 1.4K 9 5 15:29 LoginController.java // 登录相关接口
drwxr-xr-x 5 foolbear staff 170B 9 5 15:29 test
drwxr-xr-x 5 foolbear staff 170B 9 5 15:29 testSms
./test: // test表相关的类
total 32
-rw-r--r-- 1 foolbear staff 7.6K 9 5 15:29 TestController.java // test表CRUD相关接口
-rw-r--r-- 1 foolbear staff 726B 9 5 15:29 TestQueryVO.java
-rw-r--r-- 1 foolbear staff 269B 9 5 15:29 TestVO.java
./testSms: // testSms表相关的类
total 32
-rw-r--r-- 1 foolbear staff 7.6K 9 5 15:29 TestSmsController.java
-rw-r--r-- 1 foolbear staff 453B 9 5 15:29 TestSmsQueryVO.java
-rw-r--r-- 1 foolbear staff 317B 9 5 15:29 TestSmsVO.java
把生成的类copy到自己的项目中,将Controller类的逻辑填写完整,前端需要的接口就完成了。
更多文档请参考React通用后台项目。
spring 4.2之后开始支持CORS跨域,但可能有些问题,见代码中的注释。
对于SpringMVC的配置,给出一个例子:springMVC.xml,注意其中的message converter和跨域相关配置。
跨域需要先一次OPTIONS请求,再实际的GET/POST之类请求。如果你的web.xml中配置了一些filter,可能导致OPTIONS请求失败,这就需要具体情况具体分析了。
我的习惯是这边localhost:8080
跑着tomcat,那边localhost:4040
跑着webpack-dev-server,这样调试起来很方便。
schema中的int/float
会被转换为java中的Long/Double
,为了简单,不区分Long/Integer
和Double/Float
了,要注意一下。
一般我们要将VO转换为其他pojo去操作,转换的时候可能用到BeanUtils.copyProperties
之类的方法,对于同名但不同类型的字段,copyProperties
不会生效的,比如不会把Long id
的字段值copy给Integer id
,要自己注意下。
我在给这个项目想名字的时候,突然想起了早年玩过的一个游戏World of Goo。其中goo是一种黏黏糊糊的球状生物,可以搭建各种各样的结构,连接不同的建筑,跨越各种地形。倒是蛮切题的,这个项目也是希望连接React前端和java后端嘛。
能力所限,我只能给出java版本的,而且也未必是最优的。希望以后能有更多版本的goos吧。