14
14
15
15
package apijson .boot ;
16
16
17
+ import java .lang .reflect .Modifier ;
18
+ import java .util .List ;
17
19
import java .util .Map ;
18
20
import java .util .regex .Pattern ;
19
21
22
+ import javax .naming .Context ;
23
+
20
24
import org .springframework .beans .BeansException ;
21
25
import org .springframework .boot .SpringApplication ;
22
26
import org .springframework .boot .autoconfigure .SpringBootApplication ;
30
34
import org .springframework .web .cors .UrlBasedCorsConfigurationSource ;
31
35
import org .springframework .web .filter .CorsFilter ;
32
36
37
+ import com .alibaba .fastjson .JSON ;
38
+ import com .alibaba .fastjson .JSONObject ;
39
+ import com .alibaba .fastjson .serializer .PropertyFilter ;
40
+
33
41
import apijson .Log ;
34
42
import apijson .StringUtil ;
35
43
import apijson .framework .APIJSONApplication ;
40
48
import apijson .orm .SQLExecutor ;
41
49
import apijson .orm .Structure ;
42
50
import apijson .orm .Verifier ;
51
+ import unitauto .MethodUtil ;
52
+ import unitauto .MethodUtil .Argument ;
53
+ import unitauto .MethodUtil .InstanceGetter ;
54
+ import unitauto .MethodUtil .JSONCallback ;
55
+ import unitauto .NotNull ;
56
+ import unitauto .jar .UnitAutoApp ;
43
57
44
58
45
59
/**SpringBootApplication
49
63
@ Configuration
50
64
@ SpringBootApplication
51
65
public class DemoApplication implements ApplicationContextAware {
66
+ private static final String TAG = "DemoApplication" ;
52
67
53
68
static {
69
+
70
+ // APIJSON 配置 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
71
+
54
72
Map <String , Pattern > COMPILE_MAP = Structure .COMPILE_MAP ;
55
73
COMPILE_MAP .put ("PHONE" , StringUtil .PATTERN_PHONE );
56
74
COMPILE_MAP .put ("EMAIL" , StringUtil .PATTERN_EMAIL );
57
75
COMPILE_MAP .put ("ID_CARD" , StringUtil .PATTERN_ID_CARD );
58
76
77
+ // 使用本项目的自定义处理类
59
78
APIJSONApplication .DEFAULT_APIJSON_CREATOR = new APIJSONCreator () {
60
79
61
80
@ Override
@@ -82,6 +101,96 @@ public SQLExecutor createSQLExecutor() {
82
101
}
83
102
84
103
};
104
+
105
+ // APIJSON 配置 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
106
+
107
+
108
+
109
+ // UnitAuto 单元测试配置 https://github.com/TommyLemon/UnitAuto <<<<<<<<<<<<<<<<<<<<<<<<<<<
110
+
111
+ UnitAutoApp .init ();
112
+
113
+ // 适配 Spring 注入的类及 Context 等环境相关的类
114
+ final InstanceGetter ig = MethodUtil .INSTANCE_GETTER ;
115
+ MethodUtil .INSTANCE_GETTER = new InstanceGetter () {
116
+
117
+ @ Override
118
+ public Object getInstance (@ NotNull Class <?> clazz , List <Argument > classArgs , Boolean reuse ) throws Exception {
119
+ if (APPLICATION_CONTEXT != null && ApplicationContext .class .isAssignableFrom (clazz ) && clazz .isAssignableFrom (APPLICATION_CONTEXT .getClass ())) {
120
+ return APPLICATION_CONTEXT ;
121
+ }
122
+
123
+ if (reuse != null && reuse && (classArgs == null || classArgs .isEmpty ())) {
124
+ return APPLICATION_CONTEXT .getBean (clazz );
125
+ }
126
+
127
+ return ig .getInstance (clazz , classArgs , reuse );
128
+ }
129
+ };
130
+
131
+ // 排除转换 JSON 异常的类,一般是 Context 等环境相关的类
132
+ final JSONCallback jc = MethodUtil .JSON_CALLBACK ;
133
+ MethodUtil .JSON_CALLBACK = new JSONCallback () {
134
+
135
+ @ Override
136
+ public JSONObject newSuccessResult () {
137
+ return jc .newSuccessResult ();
138
+ }
139
+
140
+ @ Override
141
+ public JSONObject newErrorResult (Throwable e ) {
142
+ return jc .newErrorResult (e );
143
+ }
144
+
145
+ @ Override
146
+ public JSONObject parseJSON (String type , Object value ) {
147
+ if (value == null || unitauto .JSON .isBooleanOrNumberOrString (value ) || value instanceof JSON || value instanceof Enum ) {
148
+ return jc .parseJSON (type , value );
149
+ }
150
+
151
+ if (value instanceof ApplicationContext
152
+ || value instanceof Context
153
+ || value instanceof javax .validation .MessageInterpolator .Context
154
+ || value instanceof org .omg .CORBA .Context
155
+ || value instanceof org .apache .catalina .Context
156
+ || value instanceof ch .qos .logback .core .Context
157
+ ) {
158
+ value = value .toString ();
159
+ }
160
+ else {
161
+ try {
162
+ value = JSON .parse (JSON .toJSONString (value , new PropertyFilter () {
163
+ @ Override
164
+ public boolean apply (Object object , String name , Object value ) {
165
+ if (value == null ) {
166
+ return true ;
167
+ }
168
+
169
+ if (value instanceof ApplicationContext
170
+ || value instanceof Context
171
+ || value instanceof javax .validation .MessageInterpolator .Context
172
+ || value instanceof org .omg .CORBA .Context
173
+ || value instanceof org .apache .catalina .Context
174
+ || value instanceof ch .qos .logback .core .Context
175
+ ) {
176
+ return false ;
177
+ }
178
+
179
+ return Modifier .isPublic (value .getClass ().getModifiers ());
180
+ }
181
+ }));
182
+ } catch (Exception e ) {
183
+ Log .e (TAG , "toJSONString catch \n " + e .getMessage ());
184
+ }
185
+ }
186
+
187
+ return jc .parseJSON (type , value );
188
+ }
189
+
190
+ };
191
+
192
+ // UnitAuto 单元测试配置 https://github.com/TommyLemon/UnitAuto >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
193
+
85
194
}
86
195
87
196
0 commit comments