1414
1515package apijson .boot ;
1616
17+ import java .lang .reflect .Modifier ;
18+ import java .util .List ;
1719import java .util .Map ;
1820import java .util .regex .Pattern ;
1921
22+ import javax .naming .Context ;
23+
2024import org .springframework .beans .BeansException ;
2125import org .springframework .boot .SpringApplication ;
2226import org .springframework .boot .autoconfigure .SpringBootApplication ;
3034import org .springframework .web .cors .UrlBasedCorsConfigurationSource ;
3135import org .springframework .web .filter .CorsFilter ;
3236
37+ import com .alibaba .fastjson .JSON ;
38+ import com .alibaba .fastjson .JSONObject ;
39+ import com .alibaba .fastjson .serializer .PropertyFilter ;
40+
3341import apijson .Log ;
3442import apijson .StringUtil ;
3543import apijson .framework .APIJSONApplication ;
4048import apijson .orm .SQLExecutor ;
4149import apijson .orm .Structure ;
4250import 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 ;
4357
4458
4559/**SpringBootApplication
4963@ Configuration
5064@ SpringBootApplication
5165public class DemoApplication implements ApplicationContextAware {
66+ private static final String TAG = "DemoApplication" ;
5267
5368 static {
69+
70+ // APIJSON 配置 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
71+
5472 Map <String , Pattern > COMPILE_MAP = Structure .COMPILE_MAP ;
5573 COMPILE_MAP .put ("PHONE" , StringUtil .PATTERN_PHONE );
5674 COMPILE_MAP .put ("EMAIL" , StringUtil .PATTERN_EMAIL );
5775 COMPILE_MAP .put ("ID_CARD" , StringUtil .PATTERN_ID_CARD );
5876
77+ // 使用本项目的自定义处理类
5978 APIJSONApplication .DEFAULT_APIJSON_CREATOR = new APIJSONCreator () {
6079
6180 @ Override
@@ -82,6 +101,96 @@ public SQLExecutor createSQLExecutor() {
82101 }
83102
84103 };
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+
85194 }
86195
87196
0 commit comments