From a3583311b4719119484adea4931bf02c1a3d69a6 Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 5 Sep 2016 22:50:27 +0800 Subject: [PATCH] bug fixed for jsoncreator primive type default values. issue #802 --- .../deserializer/JavaBeanDeserializer.java | 21 +++++++++++- .../JSONCreatorTest_default_boolean.java | 33 +++++++++++++++++++ .../creator/JSONCreatorTest_default_byte.java | 33 +++++++++++++++++++ .../JSONCreatorTest_default_double.java | 33 +++++++++++++++++++ .../JSONCreatorTest_default_float.java | 33 +++++++++++++++++++ .../creator/JSONCreatorTest_default_int.java | 33 +++++++++++++++++++ .../creator/JSONCreatorTest_default_long.java | 33 +++++++++++++++++++ .../JSONCreatorTest_default_short.java | 33 +++++++++++++++++++ .../com/alibaba/json/bvt/ref/RefTest13.java | 2 +- 9 files changed, 252 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_boolean.java create mode 100644 src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_byte.java create mode 100644 src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_double.java create mode 100644 src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_float.java create mode 100644 src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_int.java create mode 100644 src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_long.java create mode 100644 src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_short.java diff --git a/src/main/java/com/alibaba/fastjson/parser/deserializer/JavaBeanDeserializer.java b/src/main/java/com/alibaba/fastjson/parser/deserializer/JavaBeanDeserializer.java index e6ba2a95cd..4e54c8356d 100755 --- a/src/main/java/com/alibaba/fastjson/parser/deserializer/JavaBeanDeserializer.java +++ b/src/main/java/com/alibaba/fastjson/parser/deserializer/JavaBeanDeserializer.java @@ -602,7 +602,26 @@ protected T deserialze(DefaultJSONParser parser, // Object[] params = new Object[size]; for (int i = 0; i < size; ++i) { FieldInfo fieldInfo = fieldInfoList[i]; - params[i] = fieldValues.get(fieldInfo.name); + Object param = fieldValues.get(fieldInfo.name); + if (param == null) { + Type fieldType = fieldInfo.fieldType; + if (fieldType == byte.class) { + param = (byte) 0; + } else if (fieldType == short.class) { + param = (short) 0; + } else if (fieldType == int.class) { + param = 0; + } else if (fieldType == long.class) { + param = 0L; + } else if (fieldType == float.class) { + param = 0F; + } else if (fieldType == double.class) { + param = 0D; + } else if (fieldType == boolean.class) { + param = Boolean.FALSE; + } + } + params[i] = param; } if (beanInfo.creatorConstructor != null) { diff --git a/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_boolean.java b/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_boolean.java new file mode 100644 index 0000000000..70a21cc227 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_boolean.java @@ -0,0 +1,33 @@ +package com.alibaba.json.bvt.parser.creator; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONCreator; +import com.alibaba.fastjson.annotation.JSONField; +import junit.framework.TestCase; +import org.junit.Assert; + +public class JSONCreatorTest_default_boolean extends TestCase { + + public void test_create() throws Exception { + Model model = JSON.parseObject("{\"name\":\"wenshao\"}", Model.class); + Assert.assertFalse(model.id); + Assert.assertEquals("wenshao", model.name); + } + + + public static class Model { + + private final boolean id; + private final String name; + + @JSONCreator + public Model(@JSONField(name="id") boolean id, @JSONField(name="name") String name) { + this.id = id; + this.name = name; + } + } + + public static class Value { + + } +} diff --git a/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_byte.java b/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_byte.java new file mode 100644 index 0000000000..2683e7fdb6 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_byte.java @@ -0,0 +1,33 @@ +package com.alibaba.json.bvt.parser.creator; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONCreator; +import com.alibaba.fastjson.annotation.JSONField; +import junit.framework.TestCase; +import org.junit.Assert; + +public class JSONCreatorTest_default_byte extends TestCase { + + public void test_create() throws Exception { + Model model = JSON.parseObject("{\"name\":\"wenshao\"}", Model.class); + Assert.assertEquals(0, model.id); + Assert.assertEquals("wenshao", model.name); + } + + + public static class Model { + + private final byte id; + private final String name; + + @JSONCreator + public Model(@JSONField(name="id") byte id, @JSONField(name="name") String name) { + this.id = id; + this.name = name; + } + } + + public static class Value { + + } +} diff --git a/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_double.java b/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_double.java new file mode 100644 index 0000000000..2f8051ed60 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_double.java @@ -0,0 +1,33 @@ +package com.alibaba.json.bvt.parser.creator; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONCreator; +import com.alibaba.fastjson.annotation.JSONField; +import junit.framework.TestCase; +import org.junit.Assert; + +public class JSONCreatorTest_default_double extends TestCase { + + public void test_create() throws Exception { + Model model = JSON.parseObject("{\"name\":\"wenshao\"}", Model.class); + Assert.assertTrue(model.id == 0); + Assert.assertEquals("wenshao", model.name); + } + + + public static class Model { + + private final double id; + private final String name; + + @JSONCreator + public Model(@JSONField(name="id") double id, @JSONField(name="name") String name) { + this.id = id; + this.name = name; + } + } + + public static class Value { + + } +} diff --git a/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_float.java b/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_float.java new file mode 100644 index 0000000000..10d83711cd --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_float.java @@ -0,0 +1,33 @@ +package com.alibaba.json.bvt.parser.creator; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONCreator; +import com.alibaba.fastjson.annotation.JSONField; +import junit.framework.TestCase; +import org.junit.Assert; + +public class JSONCreatorTest_default_float extends TestCase { + + public void test_create() throws Exception { + Model model = JSON.parseObject("{\"name\":\"wenshao\"}", Model.class); + Assert.assertTrue(model.id == 0); + Assert.assertEquals("wenshao", model.name); + } + + + public static class Model { + + private final float id; + private final String name; + + @JSONCreator + public Model(@JSONField(name="id") float id, @JSONField(name="name") String name) { + this.id = id; + this.name = name; + } + } + + public static class Value { + + } +} diff --git a/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_int.java b/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_int.java new file mode 100644 index 0000000000..e3cc2e7ad4 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_int.java @@ -0,0 +1,33 @@ +package com.alibaba.json.bvt.parser.creator; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONCreator; +import com.alibaba.fastjson.annotation.JSONField; +import junit.framework.TestCase; +import org.junit.Assert; + +public class JSONCreatorTest_default_int extends TestCase { + + public void test_create() throws Exception { + Model model = JSON.parseObject("{\"name\":\"wenshao\"}", Model.class); + Assert.assertEquals(0, model.id); + Assert.assertEquals("wenshao", model.name); + } + + + public static class Model { + + private final int id; + private final String name; + + @JSONCreator + public Model(@JSONField(name="id") int id, @JSONField(name="name") String name) { + this.id = id; + this.name = name; + } + } + + public static class Value { + + } +} diff --git a/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_long.java b/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_long.java new file mode 100644 index 0000000000..93f8f0ef25 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_long.java @@ -0,0 +1,33 @@ +package com.alibaba.json.bvt.parser.creator; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONCreator; +import com.alibaba.fastjson.annotation.JSONField; +import junit.framework.TestCase; +import org.junit.Assert; + +public class JSONCreatorTest_default_long extends TestCase { + + public void test_create() throws Exception { + Model model = JSON.parseObject("{\"name\":\"wenshao\"}", Model.class); + Assert.assertEquals(0, model.id); + Assert.assertEquals("wenshao", model.name); + } + + + public static class Model { + + private final long id; + private final String name; + + @JSONCreator + public Model(@JSONField(name="id") long id, @JSONField(name="name") String name) { + this.id = id; + this.name = name; + } + } + + public static class Value { + + } +} diff --git a/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_short.java b/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_short.java new file mode 100644 index 0000000000..d228e71592 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/parser/creator/JSONCreatorTest_default_short.java @@ -0,0 +1,33 @@ +package com.alibaba.json.bvt.parser.creator; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONCreator; +import com.alibaba.fastjson.annotation.JSONField; +import junit.framework.TestCase; +import org.junit.Assert; + +public class JSONCreatorTest_default_short extends TestCase { + + public void test_create() throws Exception { + Model model = JSON.parseObject("{\"name\":\"wenshao\"}", Model.class); + Assert.assertEquals(0, model.id); + Assert.assertEquals("wenshao", model.name); + } + + + public static class Model { + + private final short id; + private final String name; + + @JSONCreator + public Model(@JSONField(name="id") short id, @JSONField(name="name") String name) { + this.id = id; + this.name = name; + } + } + + public static class Value { + + } +} diff --git a/src/test/java/com/alibaba/json/bvt/ref/RefTest13.java b/src/test/java/com/alibaba/json/bvt/ref/RefTest13.java index e1f1a6c0e5..b8f16f0b2c 100755 --- a/src/test/java/com/alibaba/json/bvt/ref/RefTest13.java +++ b/src/test/java/com/alibaba/json/bvt/ref/RefTest13.java @@ -45,7 +45,7 @@ public Child getChild() { } public String toString() { - return "Entity-" + id; + return "Model-" + id; } }