11
11
12
12
package cn .wubo .apijson .dynamic .datasource .controller ;
13
13
14
- import java .net .URLDecoder ;
15
- import java .util .ArrayList ;
16
- import java .util .List ;
17
- import java .util .Map ;
18
-
19
- import javax .servlet .http .HttpSession ;
20
-
14
+ import apijson .RequestMethod ;
15
+ import apijson .StringUtil ;
16
+ import apijson .framework .APIJSONController ;
17
+ import apijson .orm .Parser ;
21
18
import cn .wubo .apijson .dynamic .datasource .controller .dto .RecordDTO ;
22
19
import cn .wubo .apijson .dynamic .datasource .framework .ADDTransactional ;
23
20
import com .alibaba .fastjson .JSON ;
24
21
import com .alibaba .fastjson .JSONArray ;
25
22
import com .alibaba .fastjson .JSONObject ;
26
- import org .springframework .web .bind .annotation .GetMapping ;
27
- import org .springframework .web .bind .annotation .PathVariable ;
28
- import org .springframework .web .bind .annotation .PostMapping ;
29
- import org .springframework .web .bind .annotation .RequestBody ;
30
- import org .springframework .web .bind .annotation .RequestMapping ;
31
- import org .springframework .web .bind .annotation .RequestParam ;
32
- import org .springframework .web .bind .annotation .RestController ;
23
+ import jakarta .servlet .http .HttpSession ;
24
+ import org .springframework .web .bind .annotation .*;
33
25
34
- import apijson .RequestMethod ;
35
- import apijson .StringUtil ;
36
- import apijson .framework .APIJSONController ;
37
- import apijson .orm .Parser ;
26
+ import java .net .URLDecoder ;
27
+ import java .util .List ;
28
+ import java .util .Map ;
38
29
39
30
40
- /**请求路由入口控制器,包括通用增删改查接口等,转交给 APIJSON 的 Parser 来处理
31
+ /**
32
+ * 请求路由入口控制器,包括通用增删改查接口等,转交给 APIJSON 的 Parser 来处理
41
33
* 具体见 SpringBoot 文档
42
34
* https://www.springcloud.cc/spring-boot.html#boot-features-spring-mvc
43
35
* 以及 APIJSON 通用文档 3.设计规范 3.1 操作方法
46
38
* <br > 1.减少代码 - 客户端无需写HTTP GET,PUT等各种方式的请求代码
47
39
* <br > 2.提高性能 - 无需URL encode和decode
48
40
* <br > 3.调试方便 - 建议使用 APIAuto(http://apijson.cn/api) 或 Postman
41
+ *
49
42
* @author Lemon
50
43
*/
51
44
@ RestController
52
45
@ RequestMapping ("" )
53
46
public class DemoController extends APIJSONController <Long > {
54
47
55
- @ Override
56
- public Parser <Long > newParser (HttpSession session , RequestMethod method ) {
57
- return super .newParser (session , method ).setNeedVerify (false ); // TODO 这里关闭校验,方便新手快速测试,实际线上项目建议开启
58
- }
48
+ @ Override
49
+ public Parser <Long > newParser (HttpSession session , RequestMethod method ) {
50
+ return super .newParser (session , method ).setNeedVerify (false ); // TODO 这里关闭校验,方便新手快速测试,实际线上项目建议开启
51
+ }
59
52
60
- /**
61
- * 批量处理增删改查
62
- * @param records
63
- * @param session
64
- * @return
65
- */
66
- @ PostMapping (value = "saveBatch" ) // 如果和其它的接口 URL 冲突,可以加前缀,例如改为 crud/{method} 或 Controller 注解 @RequestMapping("crud")
67
- @ ADDTransactional
68
- public JSONArray crud (@ RequestBody List <RecordDTO > records , HttpSession session ) {
69
- JSONArray ja = new JSONArray ();
70
- for (RecordDTO rec : records ) {
71
- JSONObject jo = JSON .parseObject (super .crud (rec .getMethod (), rec .getData ().toJSONString (), session ));
72
- if (jo .containsKey ("code" ) && jo .getInteger ("code" ) != 200 ) throw new RuntimeException (jo .getString ("msg" ));
73
- ja .add (jo );
74
- }
75
- return ja ;
76
- }
53
+ /**
54
+ * 批量处理增删改查操作
55
+ *
56
+ * 该方法用于批量处理数据库的增删改查操作,通过接收一个包含多个记录的列表,
57
+ * 并利用会话进行数据库操作,返回一个包含所有操作结果的JSONArray对象
58
+ *
59
+ * @param records 一个包含多个RecordDTO的列表,每个RecordDTO代表一个数据库操作
60
+ * @param session HTTP会话对象,用于在多个请求之间保持状态
61
+ * @return 返回一个JSONArray对象,包含每个操作的结果
62
+ *
63
+ * 注意:该方法使用了自定义的ADDTransactional注解,可能需要额外的配置来支持这种事务控制方式
64
+ *
65
+ * 可能的改进方向:
66
+ * - 考虑增加操作类型(增删改查)的枚举或者常量,以提高代码的可读性和可维护性
67
+ * - 对于错误处理,目前是直接抛出运行时异常,可以考虑返回具体的错误代码或者使用HTTP状态码来表示错误
68
+ */
69
+ @ PostMapping (value = "saveBatch" )
70
+ @ ADDTransactional
71
+ public JSONArray saveBatch (@ RequestBody List <RecordDTO > records , HttpSession session ) {
72
+ JSONArray ja = new JSONArray ();
73
+ for (RecordDTO rec : records ) {
74
+ JSONObject jo = JSON .parseObject (super .crud (rec .getMethod (), rec .getData ().toJSONString (), session ));
75
+ if (jo .containsKey ("code" ) && jo .getInteger ("code" ) != 200 ) throw new RuntimeException (jo .getString ("msg" ));
76
+ ja .add (jo );
77
+ }
78
+ return ja ;
79
+ }
77
80
78
- /**增删改查统一接口,这个一个接口可替代 7 个万能通用接口,牺牲一些路由解析性能来提升一点开发效率
79
- * @param method
80
- * @param request
81
- * @param session
82
- * @return
83
- */
84
- @ PostMapping (value = "{method}" ) // 如果和其它的接口 URL 冲突,可以加前缀,例如改为 crud/{method} 或 Controller 注解 @RequestMapping("crud")
85
- @ Override
86
- public String crud (@ PathVariable String method , @ RequestBody String request , HttpSession session ) {
87
- return super .crud (method , request , session );
88
- }
81
+ /**
82
+ * 增删改查统一接口,这个一个接口可替代 7 个万能通用接口,牺牲一些路由解析性能来提升一点开发效率
83
+ *
84
+ * @param method
85
+ * @param request
86
+ * @param session
87
+ * @return
88
+ */
89
+ @ PostMapping (value = "{method}" )
90
+ // 如果和其它的接口 URL 冲突,可以加前缀,例如改为 crud/{method} 或 Controller 注解 @RequestMapping("crud")
91
+ @ Override
92
+ public String crud (@ PathVariable String method , @ RequestBody String request , HttpSession session ) {
93
+ return super .crud (method , request , session );
94
+ }
89
95
90
- /**增删改查统一接口,这个一个接口可替代 7 个万能通用接口,牺牲一些路由解析性能来提升一点开发效率
91
- * @param method
92
- * @param tag
93
- * @param params
94
- * @param request
95
- * @param session
96
- * @return
97
- */
98
- @ PostMapping ("{method}/{tag}" ) // 如果和其它的接口 URL 冲突,可以加前缀,例如改为 crud/{method}/{tag} 或 Controller 注解 @RequestMapping("crud")
99
- @ Override
100
- public String crudByTag (@ PathVariable String method , @ PathVariable String tag , @ RequestParam Map <String , String > params , @ RequestBody String request , HttpSession session ) {
101
- return super .crudByTag (method , tag , params , request , session );
102
- }
96
+ /**
97
+ * 增删改查统一接口,这个一个接口可替代 7 个万能通用接口,牺牲一些路由解析性能来提升一点开发效率
98
+ *
99
+ * @param method
100
+ * @param tag
101
+ * @param params
102
+ * @param request
103
+ * @param session
104
+ * @return
105
+ */
106
+ @ PostMapping ("{method}/{tag}" )
107
+ // 如果和其它的接口 URL 冲突,可以加前缀,例如改为 crud/{method}/{tag} 或 Controller 注解 @RequestMapping("crud")
108
+ @ Override
109
+ public String crudByTag (@ PathVariable String method , @ PathVariable String tag , @ RequestParam Map <String , String > params , @ RequestBody String request , HttpSession session ) {
110
+ return super .crudByTag (method , tag , params , request , session );
111
+ }
103
112
104
- /**获取
105
- * 只为兼容HTTP GET请求,推荐用HTTP POST,可删除
106
- * @param request 只用String,避免encode后未decode
107
- * @param session
108
- * @return
109
- * @see {@link RequestMethod#GET}
110
- */
111
- @ GetMapping ("get/{request}" )
112
- public String openGet (@ PathVariable String request , HttpSession session ) {
113
- try {
114
- request = URLDecoder .decode (request , StringUtil .UTF_8 );
115
- } catch (Exception e ) {
116
- // Parser 会报错
117
- }
118
- return get (request , session );
119
- }
113
+ /**
114
+ * 获取
115
+ * 只为兼容HTTP GET请求,推荐用HTTP POST,可删除
116
+ *
117
+ * @param request 只用String,避免encode后未decode
118
+ * @param session
119
+ * @return
120
+ * @see {@link RequestMethod#GET}
121
+ */
122
+ @ GetMapping ("get/{request}" )
123
+ public String openGet (@ PathVariable String request , HttpSession session ) {
124
+ try {
125
+ request = URLDecoder .decode (request , StringUtil .UTF_8 );
126
+ } catch (Exception e ) {
127
+ // Parser 会报错
128
+ }
129
+ return get (request , session );
130
+ }
120
131
121
132
}
0 commit comments