1515package apijson .gson ;
1616
1717import apijson .NotNull ;
18- import apijson .framework .APIJSONCreator ;
1918
19+ import java .lang .reflect .Array ;
20+ import java .util .ArrayList ;
21+ import java .util .LinkedHashMap ;
2022import java .util .List ;
2123import java .util .Map ;
2224import com .google .gson .Gson ;
@@ -35,15 +37,20 @@ public class APIJSONApplication extends apijson.framework.APIJSONApplication {
3537 public static TypeToken <?> JSON_ARRAY_TOKEN ;
3638 public static Class <?> JSON_ARRAY_CLASS ;
3739 static {
38- JSON_OBJECT_TOKEN = new TypeToken <Map <String , Object >>(){};
40+ APIJSONParser .IS_RETURN_STACK_TRACE = false ;
41+
42+ GSON = new Gson ();
43+
44+ JSON_OBJECT_TOKEN = new TypeToken <LinkedHashMap <String , Object >>(){};
3945 JSON_OBJECT_CLASS = JSON_OBJECT_TOKEN .getRawType ();
4046
41- JSON_ARRAY_TOKEN = new TypeToken <List <Object >>(){};
47+ JSON_ARRAY_TOKEN = new TypeToken <ArrayList <Object >>(){};
4248 JSON_ARRAY_CLASS = JSON_ARRAY_TOKEN .getRawType ();
4349
44- GSON = apijson .gson .APIJSONApplication .GSON ;
4550 // apijson.JSON.DEFAULT_JSON_PARSER = JSON.DEFAULT_JSON_PARSER; // 解决 DEFAULT_JSON_PARSER 初始化前就自测导致抛异常
4651
52+ DEFAULT_APIJSON_CREATOR = new APIJSONCreator <>();
53+
4754 JSON .DEFAULT_JSON_PARSER = new JSONParser () {
4855 @ Override
4956 public Map <String , Object > createJSONObject () {
@@ -94,7 +101,22 @@ public List<Object> parseArray(Object json) {
94101
95102 @ Override
96103 public <T > List <T > parseArray (Object json , Class <T > clazz ) {
97- return GSON .fromJson (toJSONString (json ), new TypeToken <List <T >>(){}.getType ());
104+ List <Object > list = parseArray (json );
105+ if (list == null ) {
106+ return null ;
107+ }
108+
109+ List <T > list2 = new ArrayList <>();
110+ for (int i = 0 ; i < list .size (); i ++) {
111+ Object obj = list .get (i );
112+ if (obj != null && clazz != null && ! clazz .isAssignableFrom (obj .getClass ())) {
113+ String str = toJSONString (obj );
114+ obj = clazz .isAssignableFrom (String .class ) ? str : GSON .fromJson (str , clazz );
115+ }
116+ list2 .add ((T ) obj );
117+ }
118+
119+ return list2 ;
98120 }
99121 };
100122 }
@@ -124,8 +146,7 @@ public static void init(boolean shutdownWhenServerError) throws Exception {
124146 * @return
125147 * @throws Exception
126148 */
127- public static <T , M extends Map <String , Object >, L extends List <Object >> void init (
128- @ NotNull APIJSONCreator <T , M , L > creator ) throws Exception {
149+ public static <T > void init (@ NotNull APIJSONCreator <T > creator ) throws Exception {
129150 init (true , creator );
130151 }
131152 /**初始化,加载所有配置并校验
@@ -134,8 +155,7 @@ public static <T, M extends Map<String, Object>, L extends List<Object>> void in
134155 * @return
135156 * @throws Exception
136157 */
137- public static <T , M extends Map <String , Object >, L extends List <Object >> void init (
138- boolean shutdownWhenServerError , @ NotNull APIJSONCreator <T , M , L > creator ) throws Exception {
158+ public static <T > void init (boolean shutdownWhenServerError , @ NotNull APIJSONCreator <T > creator ) throws Exception {
139159 apijson .framework .APIJSONApplication .init (shutdownWhenServerError , creator );
140160 }
141161
0 commit comments