From da1e3fd54f0441dfa04caad3c5ff0673a635856b Mon Sep 17 00:00:00 2001 From: yndu13 Date: Tue, 28 Nov 2023 17:56:12 +0800 Subject: [PATCH] fix: resolve null value in map & list --- src/main/java/com/aliyun/tea/TeaModel.java | 8 +++-- .../java/com/aliyun/tea/TeaModelTest.java | 30 +++++++++++++++++-- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/aliyun/tea/TeaModel.java b/src/main/java/com/aliyun/tea/TeaModel.java index 4eefd3b..0bde631 100644 --- a/src/main/java/com/aliyun/tea/TeaModel.java +++ b/src/main/java/com/aliyun/tea/TeaModel.java @@ -117,7 +117,9 @@ private static Object buildObject(Object o, Class self, Type subType, String obj Map valueMap = (Map) o; Map result = new HashMap(); for (Map.Entry entry : valueMap.entrySet()) { - if (null == subType || subType instanceof WildcardType) { + if (null == entry.getValue()) { + result.put(entry.getKey(), null); + } else if (null == subType || subType instanceof WildcardType) { result.put(entry.getKey(), entry.getValue()); } else if (subType instanceof Class) { result.put(entry.getKey(), buildObject(entry.getValue(), (Class) subType, null, objectName)); @@ -132,7 +134,9 @@ private static Object buildObject(Object o, Class self, Type subType, String obj List valueList = (List) o; List result = new ArrayList(); for (Object object : valueList) { - if (null == subType || subType instanceof WildcardType) { + if (null == object) { + result.add(null); + } else if (null == subType || subType instanceof WildcardType) { result.add(object); } else if (subType instanceof Class) { result.add(buildObject(object, (Class) subType, null, objectName)); diff --git a/src/test/java/com/aliyun/tea/TeaModelTest.java b/src/test/java/com/aliyun/tea/TeaModelTest.java index 81efe40..85d7138 100644 --- a/src/test/java/com/aliyun/tea/TeaModelTest.java +++ b/src/test/java/com/aliyun/tea/TeaModelTest.java @@ -59,6 +59,12 @@ public static class SubModel extends TeaModel { @NameInMap("writeable") public OutputStream writeable; + + @NameInMap("mapTest") + public Map mapTest; + + @NameInMap("listMapTest") + public List> listMapTest; } @Test @@ -109,6 +115,26 @@ public void toModelTest() { submodel = TeaModel.toModel(map, new SubModel()); Assert.assertEquals("2", submodel.baseDriveResponse.driveId); + Map mapTest = new HashMap<>(); + mapTest.put("str", "test"); + mapTest.put("bool", false); + mapTest.put("num", 0); + mapTest.put("null", null); + map.put("mapTest", mapTest); + List> listMapTest = new ArrayList<>(); + listMapTest.add(null); + listMapTest.add(mapTest); + listMapTest.add(null); + map.put("listMapTest", listMapTest); + submodel = TeaModel.toModel(map, new SubModel()); + Assert.assertEquals("test", submodel.mapTest.get("str")); + Assert.assertEquals(false, submodel.mapTest.get("bool")); + Assert.assertEquals(0, submodel.mapTest.get("num")); + Assert.assertNull(submodel.mapTest.get("null")); + Assert.assertNull(submodel.listMapTest.get(0)); + Assert.assertEquals(4, submodel.listMapTest.get(1).size()); + Assert.assertNull(submodel.listMapTest.get(2)); + map.clear(); List baseDriveResponseList = new ArrayList<>(); baseDriveResponseList.add(baseDriveResponse); @@ -161,7 +187,7 @@ public void toMap() { Map map = submodel.toMap(); System.out.println(map.toString()); - Assert.assertEquals(9, map.size()); + Assert.assertEquals(11, map.size()); Assert.assertEquals("the access key id", map.get("access_key_id")); Assert.assertEquals("the access token", map.get("accessToken")); ArrayList list = (ArrayList) map.get("listTest"); @@ -179,7 +205,7 @@ public void toMapAdvance() { model.subModel = submodel; Map m = TeaModel.toMap(model); Map sub = (Map) m.get("sub_model"); - Assert.assertEquals(9, sub.size()); // except Stream properties + Assert.assertEquals(11, sub.size()); // except Stream properties } @Test