From 37088117491811f060c518fcd0761cd5a195d8fa Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 13 Jul 2017 22:07:06 +0800 Subject: [PATCH] bug fixed for BrowserSecure. --- src/main/java/com/alibaba/fastjson/JSON.java | 9 + .../fastjson/serializer/SerializeWriter.java | 48 ++- .../com/alibaba/json/bvt/CurrencyTest5.java | 2 +- .../json/bvt/StringFieldTest_special_1.java | 3 +- .../json/bvt/StringFieldTest_special_2.java | 3 +- .../json/bvt/StringFieldTest_special_3.java | 9 +- .../com/alibaba/json/bvt/bug/Issue569.java | 42 ++ .../alibaba/json/bvt/emoji/EmojiTest0.java | 28 ++ .../json/bvt/issue_1200/Issue1229.java | 46 ++ .../json/bvt/issue_1200/Issue1233.java | 90 ++++ .../json/bvt/issue_1200/Issue1299.java | 82 ++++ .../alibaba/json/bvt/jdk8/OptionalTest4.java | 25 ++ .../json/bvt/parser/AEHuangliang2Test.java | 395 ++++++++++++++++++ .../BigListStringFieldTest_private.java | 3 + .../parser/BigStringFieldTest_private.java | 38 +- .../bvt/parser/deser/extra/ExtraTest.java | 17 + .../SerializeWriterTest_BrowserSecure.java | 20 +- ...lizeWriterTest_BrowserSecure_4_script.java | 18 + .../json/bvtVO/ae/huangliang2/Area.java | 15 + .../json/bvtVO/ae/huangliang2/Floor.java | 12 + .../bvtVO/ae/huangliang2/FloorPageData.java | 11 + .../json/bvtVO/ae/huangliang2/FloorV1.java | 18 + .../json/bvtVO/ae/huangliang2/FloorV2.java | 18 + .../json/bvtVO/ae/huangliang2/MockResult.java | 12 + .../bvtVO/ae/huangliang2/NetResponse.java | 23 + .../json/bvtVO/ae/huangliang2/Section.java | 22 + .../json/bvtVO/vip_com/QueryLoanOrderRsp.java | 98 +++++ .../json/bvtVO/vip_com/TxnListItsm.java | 25 ++ 28 files changed, 1093 insertions(+), 39 deletions(-) create mode 100644 src/test/java/com/alibaba/json/bvt/bug/Issue569.java create mode 100644 src/test/java/com/alibaba/json/bvt/emoji/EmojiTest0.java create mode 100644 src/test/java/com/alibaba/json/bvt/issue_1200/Issue1229.java create mode 100644 src/test/java/com/alibaba/json/bvt/issue_1200/Issue1233.java create mode 100644 src/test/java/com/alibaba/json/bvt/issue_1200/Issue1299.java create mode 100644 src/test/java/com/alibaba/json/bvt/jdk8/OptionalTest4.java create mode 100644 src/test/java/com/alibaba/json/bvt/parser/AEHuangliang2Test.java create mode 100644 src/test/java/com/alibaba/json/bvt/parser/deser/extra/ExtraTest.java create mode 100644 src/test/java/com/alibaba/json/bvt/serializer/SerializeWriterTest_BrowserSecure_4_script.java create mode 100644 src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/Area.java create mode 100644 src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/Floor.java create mode 100644 src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/FloorPageData.java create mode 100644 src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/FloorV1.java create mode 100644 src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/FloorV2.java create mode 100644 src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/MockResult.java create mode 100644 src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/NetResponse.java create mode 100644 src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/Section.java create mode 100755 src/test/java/com/alibaba/json/bvtVO/vip_com/QueryLoanOrderRsp.java create mode 100755 src/test/java/com/alibaba/json/bvtVO/vip_com/TxnListItsm.java diff --git a/src/main/java/com/alibaba/fastjson/JSON.java b/src/main/java/com/alibaba/fastjson/JSON.java index b6f08fe62a..8a8333166a 100755 --- a/src/main/java/com/alibaba/fastjson/JSON.java +++ b/src/main/java/com/alibaba/fastjson/JSON.java @@ -161,6 +161,9 @@ public static Object parse(String text, int features) { public static Object parse(byte[] input, Feature... features) { char[] chars = allocateChars(input.length); int len = IOUtils.decodeUTF8(input, 0, input.length, chars); + if (len < 0) { + return null; + } return parse(new String(chars, 0, len), features); } @@ -382,8 +385,14 @@ public static T parseObject(byte[] bytes, int offset, int len, Charset chars if (charset == IOUtils.UTF8) { char[] chars = allocateChars(bytes.length); int chars_len = IOUtils.decodeUTF8(bytes, offset, len, chars); + if (chars_len < 0) { + return null; + } strVal = new String(chars, 0, chars_len); } else { + if (len < 0) { + return null; + } strVal = new String(bytes, offset, len, charset); } return (T) parseObject(strVal, clazz, features); diff --git a/src/main/java/com/alibaba/fastjson/serializer/SerializeWriter.java b/src/main/java/com/alibaba/fastjson/serializer/SerializeWriter.java index f49df91f11..bd185613df 100755 --- a/src/main/java/com/alibaba/fastjson/serializer/SerializeWriter.java +++ b/src/main/java/com/alibaba/fastjson/serializer/SerializeWriter.java @@ -774,7 +774,13 @@ public void writeStringWithDoubleQuote(String text, final char seperator) { char ch = text.charAt(i); if (isEnabled(SerializerFeature.BrowserSecure)) { - if (!(ch >= '0' && ch <= '9') && !(ch >= 'a' && ch <= 'z') && !(ch >= 'A' && ch <= 'Z') + if (ch == '<') { + write("<"); + continue; + } else if (ch == '>') { + write(">"); + continue; + } else if (!(ch >= '0' && ch <= '9') && !(ch >= 'a' && ch <= 'z') && !(ch >= 'A' && ch <= 'Z') && !(ch == ',') && !(ch == '.') && !(ch == '_')) { write('\\'); write('u'); @@ -864,7 +870,11 @@ public void writeStringWithDoubleQuote(String text, final char seperator) { if (!(ch >= '0' && ch <= '9') && !(ch >= 'a' && ch <= 'z') && !(ch >= 'A' && ch <= 'Z') && !(ch == ',') && !(ch == '.') && !(ch == '_')) { lastSpecialIndex = i; - newcount += 5; + if (ch == '<' || ch == '>') { + newcount += 3; + } else { + newcount += 5; + } continue; } } @@ -879,14 +889,32 @@ public void writeStringWithDoubleQuote(String text, final char seperator) { if (!(ch >= '0' && ch <= '9') && !(ch >= 'a' && ch <= 'z') && !(ch >= 'A' && ch <= 'Z') && !(ch == ',') && !(ch == '.') && !(ch == '_')) { - System.arraycopy(buf, i + 1, buf, i + 6, end - i - 1); - buf[i] = '\\'; - buf[i + 1] = 'u'; - buf[i + 2] = IOUtils.DIGITS[(ch >>> 12) & 15]; - buf[i + 3] = IOUtils.DIGITS[(ch >>> 8) & 15]; - buf[i + 4] = IOUtils.DIGITS[(ch >>> 4) & 15]; - buf[i + 5] = IOUtils.DIGITS[ch & 15]; - end += 5; + if (ch == '<') { + // < + System.arraycopy(buf, i + 1, buf, i + 4, end - i - 1); + buf[i] = '&'; + buf[i + 1] = 'l'; + buf[i + 2] = 't'; + buf[i + 3] = ';'; + end += 3; + } else if (ch == '>') { + // < + System.arraycopy(buf, i + 1, buf, i + 4, end - i - 1); + buf[i] = '&'; + buf[i + 1] = 'g'; + buf[i + 2] = 't'; + buf[i + 3] = ';'; + end += 3; + } else { + System.arraycopy(buf, i + 1, buf, i + 6, end - i - 1); + buf[i] = '\\'; + buf[i + 1] = 'u'; + buf[i + 2] = IOUtils.DIGITS[(ch >>> 12) & 15]; + buf[i + 3] = IOUtils.DIGITS[(ch >>> 8) & 15]; + buf[i + 4] = IOUtils.DIGITS[(ch >>> 4) & 15]; + buf[i + 5] = IOUtils.DIGITS[ch & 15]; + end += 5; + } } } diff --git a/src/test/java/com/alibaba/json/bvt/CurrencyTest5.java b/src/test/java/com/alibaba/json/bvt/CurrencyTest5.java index 762d9f460a..f4723dfbc0 100644 --- a/src/test/java/com/alibaba/json/bvt/CurrencyTest5.java +++ b/src/test/java/com/alibaba/json/bvt/CurrencyTest5.java @@ -18,7 +18,7 @@ public void test_0() throws Exception { jsonObject.put("value", Currency.getInstance("CNY")); String text = JSON.toJSONString(jsonObject, config); - System.out.println(text); + assertEquals("{\"value\":{\"currencyCode\":\"CNY\",\"displayName\":\"Chinese Yuan\",\"symbol\":\"CNY\"}}", text); Currency currency = JSON.parseObject(text, VO.class).value; diff --git a/src/test/java/com/alibaba/json/bvt/StringFieldTest_special_1.java b/src/test/java/com/alibaba/json/bvt/StringFieldTest_special_1.java index bc721d79d6..554b622380 100644 --- a/src/test/java/com/alibaba/json/bvt/StringFieldTest_special_1.java +++ b/src/test/java/com/alibaba/json/bvt/StringFieldTest_special_1.java @@ -31,7 +31,8 @@ public void test_special_browsecue() throws Exception { model.name = buf.toString(); String text = JSON.toJSONString(model, SerializerFeature.BrowserSecure); - + text = text.replaceAll("<", "<"); + text = text.replaceAll(">", ">"); Model model2 = JSON.parseObject(text, Model.class); Assert.assertEquals(model.name, model2.name); } diff --git a/src/test/java/com/alibaba/json/bvt/StringFieldTest_special_2.java b/src/test/java/com/alibaba/json/bvt/StringFieldTest_special_2.java index a1c75bb6a1..90cc1e3080 100644 --- a/src/test/java/com/alibaba/json/bvt/StringFieldTest_special_2.java +++ b/src/test/java/com/alibaba/json/bvt/StringFieldTest_special_2.java @@ -31,7 +31,8 @@ public void test_special_browsecue() throws Exception { model.name = buf.toString(); String text = JSON.toJSONString(model, SerializerFeature.BrowserSecure); - + text = text.replaceAll("<", "<"); + text = text.replaceAll(">", ">"); Model model2 = JSON.parseObject(text, Model.class); Assert.assertEquals(model.name, model2.name); } diff --git a/src/test/java/com/alibaba/json/bvt/StringFieldTest_special_3.java b/src/test/java/com/alibaba/json/bvt/StringFieldTest_special_3.java index 5ded31baa4..f67efb42f9 100644 --- a/src/test/java/com/alibaba/json/bvt/StringFieldTest_special_3.java +++ b/src/test/java/com/alibaba/json/bvt/StringFieldTest_special_3.java @@ -36,8 +36,13 @@ public void test_special_browsecue() throws Exception { StringWriter writer = new StringWriter(); JSON.writeJSONString(writer, model, SerializerFeature.BrowserSecure); - Model model2 = JSON.parseObject(writer.toString(), Model.class); - Assert.assertEquals(model.name, model2.name); + String text = writer.toString(); + + text = text.replaceAll("<", "<"); + text = text.replaceAll(">", ">"); + + Model model2 = JSON.parseObject(text, Model.class); + assertEquals(model.name, model2.name); } public void test_special_browsecompatible() throws Exception { diff --git a/src/test/java/com/alibaba/json/bvt/bug/Issue569.java b/src/test/java/com/alibaba/json/bvt/bug/Issue569.java new file mode 100644 index 0000000000..a895c3ea7b --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/bug/Issue569.java @@ -0,0 +1,42 @@ +package com.alibaba.json.bvt.bug; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import junit.framework.TestCase; + +import java.io.Serializable; +import java.lang.reflect.Type; +import java.util.Map; + +/** + * Created by wenshao on 02/07/2017. + */ +public class Issue569 extends TestCase { + public void test_for_issue() throws Exception { + String jsonString = "{\"backingMap\":{\"a\":{\"b\":{}}}}"; + Type type = new TypeReference>() {}.getType(); + MyTable table = JSON.parseObject(jsonString, type); + + Map valueMap = table.backingMap.get("a"); + assertNotNull(valueMap); + + MyValue value = valueMap.get("b"); + assertNotNull(value); + } + + public static class MyTable implements Serializable { + private Map> backingMap; + + public Map> getBackingMap() { + return backingMap; + } + + public void setBackingMap(Map> backingMap) { + this.backingMap = backingMap; + } + } + + public static class MyValue { + + } +} diff --git a/src/test/java/com/alibaba/json/bvt/emoji/EmojiTest0.java b/src/test/java/com/alibaba/json/bvt/emoji/EmojiTest0.java new file mode 100644 index 0000000000..02158760e5 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/emoji/EmojiTest0.java @@ -0,0 +1,28 @@ +package com.alibaba.json.bvt.emoji; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.serializer.SerializerFeature; +import junit.framework.TestCase; + +import java.io.ByteArrayOutputStream; + +/** + * Created by wenshao on 13/04/2017. + */ +public class EmojiTest0 extends TestCase { + public void test_for_emoji() throws Exception { + Model model = new Model(); + model.value = "An 😀awesome 😃string with a few 😉emojis!"; + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + JSON.writeJSONString(out, model); + + String text = new String(out.toByteArray(), "UTF-8"); + System.out.println(text); + } + + public static class Model { + public String value; + } +} diff --git a/src/test/java/com/alibaba/json/bvt/issue_1200/Issue1229.java b/src/test/java/com/alibaba/json/bvt/issue_1200/Issue1229.java new file mode 100644 index 0000000000..4de6066528 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/issue_1200/Issue1229.java @@ -0,0 +1,46 @@ +package com.alibaba.json.bvt.issue_1200; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; +import junit.framework.TestCase; + +import java.util.List; + +/** + * Created by wenshao on 30/05/2017. + */ +public class Issue1229 extends TestCase { + public void test_for_issue() throws Exception { + final Object parsed = JSON.parse("{\"data\":{}}"); + assertTrue(parsed instanceof JSONObject); + assertTrue(((JSONObject)parsed).get("data") instanceof JSONObject); + + final Result result = JSON.parseObject("{\"data\":{}}", new TypeReference>(){}); + assertNotNull(result.data); + assertTrue(result.data instanceof Data); + + final Result> result2 = JSON.parseObject("{\"data\":[]}", new TypeReference>>(){}); + assertNotNull(result2.data); + assertTrue(result2.data instanceof List); + assertEquals(0, result2.data.size()); + } + + public void parseErr() throws Exception { + JSON.parseObject("{\"data\":{}}", new TypeReference>>(){}); + fail("should be failed due to error json"); + } + + public static class Result{ + T data; + public void setData(T data) { + this.data = data; + } + public T getData() { + return data; + } + } + + public static class Data { + } +} diff --git a/src/test/java/com/alibaba/json/bvt/issue_1200/Issue1233.java b/src/test/java/com/alibaba/json/bvt/issue_1200/Issue1233.java new file mode 100644 index 0000000000..d98c5003ab --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/issue_1200/Issue1233.java @@ -0,0 +1,90 @@ +package com.alibaba.json.bvt.issue_1200; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.parser.DefaultJSONParser; +import com.alibaba.fastjson.parser.ParserConfig; +import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer; +import junit.framework.TestCase; + +import java.lang.reflect.Type; +import java.util.List; + +/** + * Created by wenshao on 30/05/2017. + */ +public class Issue1233 extends TestCase { + public void test_for_issue() throws Exception { + ParserConfig.getGlobalInstance().putDeserializer(Area.class, new ObjectDeserializer() { + public T deserialze(DefaultJSONParser parser, Type type, Object fieldName) { + JSONObject jsonObject = (JSONObject) parser.parse(); + String areaType; + + if (jsonObject.get("type") instanceof String) { + areaType = (String) jsonObject.get("type"); + } else { + return null; + } + if (Area.TYPE_SECTION.equals(areaType)) { + return (T) JSON.toJavaObject(jsonObject, Section.class); + } else if (Area.TYPE_FLOORV1.equals(areaType)) { + return (T) JSON.toJavaObject(jsonObject, FloorV1.class); + } else if (Area.TYPE_FLOORV2.equals(areaType)) { + return (T) JSON.toJavaObject(jsonObject, FloorV2.class); + } + return null; + } + + public int getFastMatchToken() { + return 0; + } + }); + + JSONObject jsonObject = JSON.parseObject("{\"type\":\"floorV2\",\"templateId\":\"x123\"}"); + + FloorV2 floorV2 = (FloorV2) jsonObject.toJavaObject(Area.class); + assertNotNull(floorV2); + assertEquals("x123", floorV2.templateId); + } + + public interface Area { + public static final String TYPE_SECTION = "section"; + public static final String TYPE_FLOORV1 = "floorV1"; + public static final String TYPE_FLOORV2 = "floorV2"; + + String getName(); + } + + public static class Section implements Area { + public List children; + + public String type; + + public String templateId; + + public String getName() { + return templateId; + } + } + + public static class FloorV1 implements Area { + public String type; + public String templateId; + + public String getName() { + return templateId; + } + } + + public static class FloorV2 implements Area { + public List children; + + public String type; + + public String templateId; + + public String getName() { + return templateId; + } + } +} diff --git a/src/test/java/com/alibaba/json/bvt/issue_1200/Issue1299.java b/src/test/java/com/alibaba/json/bvt/issue_1200/Issue1299.java new file mode 100644 index 0000000000..c7c9dcc5c3 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/issue_1200/Issue1299.java @@ -0,0 +1,82 @@ +package com.alibaba.json.bvt.issue_1200; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONField; +import junit.framework.TestCase; + +import java.io.Serializable; +import java.util.List; + +/** + * Created by wenshao on 01/07/2017. + */ +public class Issue1299 extends TestCase { + public void test_for_issue() throws Exception { + String jsonStr = "{\"code\":201,\"data\":{\"materials\":[{\"material\":\"locale\",\"success\":true," + + "\"material_id\":356,\"id\":\"5099\"}],\"unitInfo\":{\"languages\":[\"'en_US'\",\"ru_RU\"]," + + "\"unitName\":\"PC_ROCKBROS\",\"sceneKey\":\"shop_activity_page\",\"domain\":\"shopcdp.aliexpress" + + ".com\",\"format\":\"HTML\",\"unitId\":\"1625\",\"id\":1761,\"rootPath\":\"shopcdp\"," + + "\"userId\":\"jianqing.zengjq\",\"platforms\":[\"pc\",\"mobile\"],\"status\":2}},\"success\":true}"; + + UnitsSaveResponse response = JSON.parseObject(jsonStr, UnitsSaveResponse.class); + Class dataClass = response.getData().getClass(); + System.out.println(dataClass); + } + + public static class ServiceResult extends BaseResultDo implements Serializable { + @JSONField( + name = "data" + ) + private T data; + + public ServiceResult() { + } + + public T getData() { + return this.data; + } + + public void setData(T data) { + this.data = data; + } + } + + public static class UnitsSaveResponse extends ServiceResult { + + + + } + + public static class UnitSave implements Serializable { + + private SaveUnitInfo unitInfo; + + private List materials; + + public SaveUnitInfo getUnitInfo() { + return unitInfo; + } + + public void setUnitInfo(SaveUnitInfo unitInfo) { + this.unitInfo = unitInfo; + } + + public List getMaterials() { + return materials; + } + + public void setMaterials(List materials) { + this.materials = materials; + } + } + + public static class SaveUnitInfo { + + } + + public static class BaseResultDo{ + + } + + +} diff --git a/src/test/java/com/alibaba/json/bvt/jdk8/OptionalTest4.java b/src/test/java/com/alibaba/json/bvt/jdk8/OptionalTest4.java new file mode 100644 index 0000000000..d1c1981ccf --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/jdk8/OptionalTest4.java @@ -0,0 +1,25 @@ +package com.alibaba.json.bvt.jdk8; + +import com.alibaba.fastjson.JSON; +import junit.framework.TestCase; + +import java.util.Optional; + +/** + * Created by wenshao on 02/04/2017. + */ +public class OptionalTest4 extends TestCase { + public void test_for_issue() throws Exception { + JsonResult result = new JsonResult(); + result.a = Optional.empty(); + result.b = Optional.empty(); + + String json = JSON.toJSONString(result); + System.out.println(json); + } + + public static class JsonResult { + public Object a; + public Optional b; + } +} diff --git a/src/test/java/com/alibaba/json/bvt/parser/AEHuangliang2Test.java b/src/test/java/com/alibaba/json/bvt/parser/AEHuangliang2Test.java new file mode 100644 index 0000000000..a3960cd228 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/parser/AEHuangliang2Test.java @@ -0,0 +1,395 @@ +package com.alibaba.json.bvt.parser; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.parser.DefaultJSONParser; +import com.alibaba.fastjson.parser.JSONToken; +import com.alibaba.fastjson.parser.ParserConfig; +import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer; +import com.alibaba.json.bvtVO.ae.huangliang2.*; +import junit.framework.TestCase; + +import java.lang.reflect.Type; + +/** + * Created by wenshao on 09/05/2017. + */ +public class AEHuangliang2Test extends TestCase { + static String jsonData = "{\n" + + " \"areas\": [\n" + + " {\n" + + " \"@type\": \"section\",\n" + + " \"templateId\": \"grid\",\n" + + " \"style\": {\n" + + " \"card\" : \"true\",\n" + + " \"column-count\":\"2\",\n" + + " \"aspect-ratio\":\"2\",\n" + + " \"margins\":\"16 0 16 16\",\n" + + " \"background-color\": \"#ffffff\",\n" + + " \"column-gap\": \"10\"\n" + + " },\n" + + " \"children\": [\n" + + " {\n" + + " \"@type\": \"section\",\n" + + " \"templateId\": \"grid\",\n" + + " \"style\": {\n" + + " \"card\" : \"true\",\n" + + " \"column-count\":\"2\",\n" + + " \"aspect-ratio\":\"2\",\n" + + " \"margins\":\"16 0 16 16\",\n" + + " \"background-color\": \"#ffffff\",\n" + + " \"column-gap\": \"10\"\n" + + " },\n" + + " \"children\": [\n" + + " {\n" + + " \"@type\": \"floorV2\",\n" + + " \"templateId\": \"base\",\n" + + " \"image\": \"http://xxx\",\n" + + " \"fields\": [\n" + + " {\n" + + " \"index\": 0,\n" + + " \"value\": \"xxxx\",\n" + + " \"type\": \"text\",\n" + + " \"track\": {\n" + + " \"name\": \"track name\",\n" + + " \"params\": {\n" + + " \"trackParam1\": \"trackParam1\"\n" + + " }\n" + + " },\n" + + " \"extInfo\": {\n" + + " \"likeByMe\": \"true\",\n" + + " \"isFollowed\": \"true\"\n" + + " },\n" + + " \"action\": {\n" + + " \"type\": \"click\",\n" + + " \"action\": \"aecmd://nativie/invokeApi?name=key1&likeId=111&likeByMe=true\"\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"bizId\": \"banner-myae-1-746877468\",\n" + + " \"style\": {\n" + + " \"card\" : \"true\",\n" + + " \"background-color\": \"#000000\"\n" + + " },\n" + + " \"isTest\": false\n" + + " },\n" + + " {\n" + + " \"@type\": \"floorV2\",\n" + + " \"templateId\": \"base\",\n" + + " \"image\": \"http://xxx\",\n" + + " \"fields\": [\n" + + " {\n" + + " \"index\": 0,\n" + + " \"value\": \"xxxx\",\n" + + " \"type\": \"text\",\n" + + " \"track\": {\n" + + " \"name\": \"track name\",\n" + + " \"params\": {\n" + + " \"trackParam1\": \"trackParam1\"\n" + + " }\n" + + " },\n" + + " \"action\": {\n" + + " \"type\": \"click\",\n" + + " \"action\": \"aecmd://xxxx\"\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"extInfo\": {\n" + + " \"likeByMe\": \"true\"\n" + + " },\n" + + " \"bizId\": \"banner-myae-1-746877468\",\n" + + " \"style\": {\n" + + " \"card\" : \"true\",\n" + + " \"background-color\": \"#ffc1c1\"\n" + + " },\n" + + " \"isTest\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"@type\": \"floorV2\",\n" + + " \"templateId\": \"base\",\n" + + " \"image\": \"http://xxx\",\n" + + " \"fields\": [\n" + + " {\n" + + " \"index\": 0,\n" + + " \"value\": \"xxxx\",\n" + + " \"type\": \"text\",\n" + + " \"track\": {\n" + + " \"name\": \"track name\",\n" + + " \"params\": {\n" + + " \"trackParam1\": \"trackParam1\"\n" + + " }\n" + + " },\n" + + " \"extInfo\": {\n" + + " \"likeByMe\": \"true\",\n" + + " \"isFollowed\": \"true\"\n" + + " },\n" + + " \"action\": {\n" + + " \"type\": \"click\",\n" + + " \"action\": \"aecmd://nativie/invokeApi?name=key1&likeId=111&likeByMe=true\"\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"bizId\": \"banner-myae-1-746877468\",\n" + + " \"style\": {\n" + + " \"card\" : \"true\",\n" + + " \"background-color\": \"#000000\"\n" + + " },\n" + + " \"isTest\": false\n" + + " },\n" + + " {\n" + + " \"@type\": \"floorV2\",\n" + + " \"templateId\": \"base\",\n" + + " \"image\": \"http://xxx\",\n" + + " \"fields\": [\n" + + " {\n" + + " \"index\": 0,\n" + + " \"value\": \"xxxx\",\n" + + " \"type\": \"text\",\n" + + " \"track\": {\n" + + " \"name\": \"track name\",\n" + + " \"params\": {\n" + + " \"trackParam1\": \"trackParam1\"\n" + + " }\n" + + " },\n" + + " \"action\": {\n" + + " \"type\": \"click\",\n" + + " \"action\": \"aecmd://xxxx\"\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"extInfo\": {\n" + + " \"likeByMe\": \"true\"\n" + + " },\n" + + " \"bizId\": \"banner-myae-1-746877468\",\n" + + " \"style\": {\n" + + " \"card\" : \"true\",\n" + + " \"background-color\": \"#ffc1c1\"\n" + + " },\n" + + " \"isTest\": false\n" + + " }\n" + + " ]\n" + + " }\n" + + " ],\n" + + " \"version\": 3,\n" + + " \"currency\": \"RUB\"\n" + + " }"; + + static String floordata = "{\n" + + " \"isTest\": true,\n" + + " \"mockResult\": {\n" + + " \"body\": {\n" + + " \"areas\": [\n" + + " {\n" + + " \"@type\": \"section\",\n" + + " \"templateId\": \"grid\",\n" + + " \"style\": {\n" + + " \"card\" : \"true\",\n" + + " \"column-count\":\"2\",\n" + + " \"aspect-ratio\":\"2\",\n" + + " \"margins\":\"16 0 16 16\",\n" + + " \"background-color\": \"#ffffff\",\n" + + " \"column-gap\": \"10\"\n" + + " },\n" + + " \"children\": [\n" + + " {\n" + + " \"@type\": \"section\",\n" + + " \"templateId\": \"grid\",\n" + + " \"style\": {\n" + + " \"card\" : \"true\",\n" + + " \"column-count\":\"2\",\n" + + " \"aspect-ratio\":\"2\",\n" + + " \"margins\":\"16 0 16 16\",\n" + + " \"background-color\": \"#ffffff\",\n" + + " \"column-gap\": \"10\"\n" + + " },\n" + + " \"children\": [\n" + + " {\n" + + " \"@type\": \"floorV2\",\n" + + " \"templateId\": \"base\",\n" + + " \"image\": \"http://xxx\",\n" + + " \"fields\": [\n" + + " {\n" + + " \"index\": 0,\n" + + " \"value\": \"xxxx\",\n" + + " \"type\": \"text\",\n" + + " \"track\": {\n" + + " \"name\": \"track name\",\n" + + " \"params\": {\n" + + " \"trackParam1\": \"trackParam1\"\n" + + " }\n" + + " },\n" + + " \"extInfo\": {\n" + + " \"likeByMe\": \"true\",\n" + + " \"isFollowed\": \"true\"\n" + + " },\n" + + " \"action\": {\n" + + " \"type\": \"click\",\n" + + " \"action\": \"aecmd://nativie/invokeApi?name=key1&likeId=111&likeByMe=true\"\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"bizId\": \"banner-myae-1-746877468\",\n" + + " \"style\": {\n" + + " \"card\" : \"true\",\n" + + " \"background-color\": \"#000000\"\n" + + " },\n" + + " \"isTest\": false\n" + + " },\n" + + " {\n" + + " \"@type\": \"floorV2\",\n" + + " \"templateId\": \"base\",\n" + + " \"image\": \"http://xxx\",\n" + + " \"fields\": [\n" + + " {\n" + + " \"index\": 0,\n" + + " \"value\": \"xxxx\",\n" + + " \"type\": \"text\",\n" + + " \"track\": {\n" + + " \"name\": \"track name\",\n" + + " \"params\": {\n" + + " \"trackParam1\": \"trackParam1\"\n" + + " }\n" + + " },\n" + + " \"action\": {\n" + + " \"type\": \"click\",\n" + + " \"action\": \"aecmd://xxxx\"\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"extInfo\": {\n" + + " \"likeByMe\": \"true\"\n" + + " },\n" + + " \"bizId\": \"banner-myae-1-746877468\",\n" + + " \"style\": {\n" + + " \"card\" : \"true\",\n" + + " \"background-color\": \"#ffc1c1\"\n" + + " },\n" + + " \"isTest\": false\n" + + " }\n" + + " ]\n" + + " },\n" + + " {\n" + + " \"@type\": \"floorV2\",\n" + + " \"templateId\": \"base\",\n" + + " \"image\": \"http://xxx\",\n" + + " \"fields\": [\n" + + " {\n" + + " \"index\": 0,\n" + + " \"value\": \"xxxx\",\n" + + " \"type\": \"text\",\n" + + " \"track\": {\n" + + " \"name\": \"track name\",\n" + + " \"params\": {\n" + + " \"trackParam1\": \"trackParam1\"\n" + + " }\n" + + " },\n" + + " \"extInfo\": {\n" + + " \"likeByMe\": \"true\",\n" + + " \"isFollowed\": \"true\"\n" + + " },\n" + + " \"action\": {\n" + + " \"type\": \"click\",\n" + + " \"action\": \"aecmd://nativie/invokeApi?name=key1&likeId=111&likeByMe=true\"\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"bizId\": \"banner-myae-1-746877468\",\n" + + " \"style\": {\n" + + " \"card\" : \"true\",\n" + + " \"background-color\": \"#000000\"\n" + + " },\n" + + " \"isTest\": false\n" + + " },\n" + + " {\n" + + " \"@type\": \"floorV2\",\n" + + " \"templateId\": \"base\",\n" + + " \"image\": \"http://xxx\",\n" + + " \"fields\": [\n" + + " {\n" + + " \"index\": 0,\n" + + " \"value\": \"xxxx\",\n" + + " \"type\": \"text\",\n" + + " \"track\": {\n" + + " \"name\": \"track name\",\n" + + " \"params\": {\n" + + " \"trackParam1\": \"trackParam1\"\n" + + " }\n" + + " },\n" + + " \"action\": {\n" + + " \"type\": \"click\",\n" + + " \"action\": \"aecmd://xxxx\"\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"extInfo\": {\n" + + " \"likeByMe\": \"true\"\n" + + " },\n" + + " \"bizId\": \"banner-myae-1-746877468\",\n" + + " \"style\": {\n" + + " \"card\" : \"true\",\n" + + " \"background-color\": \"#ffc1c1\"\n" + + " },\n" + + " \"isTest\": false\n" + + " }\n" + + " ]\n" + + " }\n" + + " ],\n" + + " \"version\": 3,\n" + + " \"currency\": \"RUB\"\n" + + " },\n" + + " \"head\": {\n" + + " \"message\": \"\",\n" + + " \"serverTime\": 1489473042814,\n" + + " \"code\": \"200\",\n" + + " \"ab\": \"yepxf_B\"\n" + + " }\n" + + "}\n" + + "}"; + + public void test_for_issue() throws Exception { + ParserConfig.getGlobalInstance().putDeserializer(Area.class, new ObjectDeserializer() { + + public T deserialze(DefaultJSONParser parser, Type type, Object fieldName) { + JSONObject jsonObject = (JSONObject) parser.parse(); + String areaType; + + if (jsonObject.get("type") instanceof String) { + areaType = (String) jsonObject.get("type"); + } else { + return null; + } + if (Area.TYPE_SECTION.equals(areaType)) { + String text = jsonObject.toJSONString(); + return (T) JSON.parseObject(text, Section.class); + } else if (Area.TYPE_FLOORV1.equals(areaType)) { + String text = jsonObject.toJSONString(); + return (T) JSON.parseObject(text, FloorV1.class); + } else if (Area.TYPE_FLOORV2.equals(areaType)) { + String text = jsonObject.toJSONString(); + return (T) JSON.parseObject(text, FloorV2.class); + } + + return null; + } + + public int getFastMatchToken() { + return JSONToken.LBRACE; + } + }); + + ParserConfig.getGlobalInstance().addAccept("section"); + ParserConfig.getGlobalInstance().addAccept("floorV2"); + + + MockResult data = JSON.parseObject(floordata, MockResult.class); + String mockResultJson = JSON.toJSONString(data.mockResult); + NetResponse response = JSON.parseObject(mockResultJson, NetResponse.class); + + String bodyJson = JSON.toJSONString(response.body); + System.out.println(bodyJson); + FloorPageData pageData = JSON.parseObject(bodyJson, FloorPageData.class); + assertNotNull(pageData.areas); + } +} diff --git a/src/test/java/com/alibaba/json/bvt/parser/BigListStringFieldTest_private.java b/src/test/java/com/alibaba/json/bvt/parser/BigListStringFieldTest_private.java index 1de0b6fc4c..1cf78daf74 100644 --- a/src/test/java/com/alibaba/json/bvt/parser/BigListStringFieldTest_private.java +++ b/src/test/java/com/alibaba/json/bvt/parser/BigListStringFieldTest_private.java @@ -46,6 +46,9 @@ public void test_list_browserSecure() throws Exception { model.values.add(value); } String text = JSON.toJSONString(model, SerializerFeature.BrowserSecure); + + text = text.replaceAll("<", "<"); + text = text.replaceAll(">", ">"); Model model2 = JSON.parseObject(text, Model.class); Assert.assertEquals(model.values, model2.values); diff --git a/src/test/java/com/alibaba/json/bvt/parser/BigStringFieldTest_private.java b/src/test/java/com/alibaba/json/bvt/parser/BigStringFieldTest_private.java index d29ed84bf2..53646e57bb 100644 --- a/src/test/java/com/alibaba/json/bvt/parser/BigStringFieldTest_private.java +++ b/src/test/java/com/alibaba/json/bvt/parser/BigStringFieldTest_private.java @@ -23,11 +23,11 @@ public void test_bigFieldString() throws Exception { String text = JSON.toJSONString(model); Model model2 = JSON.parseObject(text, Model.class); - Assert.assertEquals(model2.f0, model.f0); - Assert.assertEquals(model2.f1, model.f1); - Assert.assertEquals(model2.f2, model.f2); - Assert.assertEquals(model2.f3, model.f3); - Assert.assertEquals(model2.f4, model.f4); + assertEquals(model2.f0, model.f0); + assertEquals(model2.f1, model.f1); + assertEquals(model2.f2, model.f2); + assertEquals(model2.f3, model.f3); + assertEquals(model2.f4, model.f4); } public void test_list() throws Exception { @@ -43,13 +43,13 @@ public void test_list() throws Exception { } String text = JSON.toJSONString(list); List list2 = JSON.parseObject(text, new TypeReference>() {}); - Assert.assertEquals(list.size(), list2.size()); + assertEquals(list.size(), list2.size()); for (int i = 0; i < 1000; ++i) { - Assert.assertEquals(list.get(i).f0, list2.get(i).f0); - Assert.assertEquals(list.get(i).f1, list2.get(i).f1); - Assert.assertEquals(list.get(i).f2, list2.get(i).f2); - Assert.assertEquals(list.get(i).f3, list2.get(i).f3); - Assert.assertEquals(list.get(i).f4, list2.get(i).f4); + assertEquals(list.get(i).f0, list2.get(i).f0); + assertEquals(list.get(i).f1, list2.get(i).f1); + assertEquals(list.get(i).f2, list2.get(i).f2); + assertEquals(list.get(i).f3, list2.get(i).f3); + assertEquals(list.get(i).f4, list2.get(i).f4); } } @@ -65,14 +65,18 @@ public void test_list_browserSecure() throws Exception { list.add(model); } String text = JSON.toJSONString(list, SerializerFeature.BrowserSecure); + + text = text.replaceAll("<", "<"); + text = text.replaceAll(">", ">"); + List list2 = JSON.parseObject(text, new TypeReference>() {}); - Assert.assertEquals(list.size(), list2.size()); + assertEquals(list.size(), list2.size()); for (int i = 0; i < 1000; ++i) { - Assert.assertEquals(list.get(i).f0, list2.get(i).f0); - Assert.assertEquals(list.get(i).f1, list2.get(i).f1); - Assert.assertEquals(list.get(i).f2, list2.get(i).f2); - Assert.assertEquals(list.get(i).f3, list2.get(i).f3); - Assert.assertEquals(list.get(i).f4, list2.get(i).f4); + assertEquals(list.get(i).f0, list2.get(i).f0); + assertEquals(list.get(i).f1, list2.get(i).f1); + assertEquals(list.get(i).f2, list2.get(i).f2); + assertEquals(list.get(i).f3, list2.get(i).f3); + assertEquals(list.get(i).f4, list2.get(i).f4); } } diff --git a/src/test/java/com/alibaba/json/bvt/parser/deser/extra/ExtraTest.java b/src/test/java/com/alibaba/json/bvt/parser/deser/extra/ExtraTest.java new file mode 100644 index 0000000000..ce1d9428f6 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/parser/deser/extra/ExtraTest.java @@ -0,0 +1,17 @@ +package com.alibaba.json.bvt.parser.deser.extra; + +import com.alibaba.fastjson.JSON; +import junit.framework.TestCase; + +/** + * Created by wenshao on 30/03/2017. + */ +public class ExtraTest extends TestCase { + public void test_0() throws Exception { + JSON.parseObject("{\"ID\":123}", Model.class); + } + + public static class Model { + public int id; + } +} diff --git a/src/test/java/com/alibaba/json/bvt/serializer/SerializeWriterTest_BrowserSecure.java b/src/test/java/com/alibaba/json/bvt/serializer/SerializeWriterTest_BrowserSecure.java index 357df4cb9e..e706376e94 100644 --- a/src/test/java/com/alibaba/json/bvt/serializer/SerializeWriterTest_BrowserSecure.java +++ b/src/test/java/com/alibaba/json/bvt/serializer/SerializeWriterTest_BrowserSecure.java @@ -41,7 +41,7 @@ public void test_zh() throws Exception { public void test_all() throws Exception { String value = ".,_~!@<>'\"\\/hello world 0123;汉字;\u2028\u2028\r\n"); + String text = JSON.toJSONString(object, SerializerFeature.BrowserSecure); + assertEquals("{\"value\":\"<script>alert\\u00281\\u0029\\u003B<\\u002Fscript>\"}", text); + } + +} diff --git a/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/Area.java b/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/Area.java new file mode 100644 index 0000000000..0e08ddbee6 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/Area.java @@ -0,0 +1,15 @@ +package com.alibaba.json.bvtVO.ae.huangliang2; + +import com.alibaba.fastjson.annotation.JSONType; + +/** + * Created by huangliang on 17/5/8. + */ +@JSONType(seeAlso = { Section.class, FloorV1.class,FloorV2.class }) +public interface Area { + public static final String TYPE_SECTION = "section"; + public static final String TYPE_FLOORV1 = "floorV1"; + public static final String TYPE_FLOORV2 = "floorV2"; + + String getName(); +} diff --git a/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/Floor.java b/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/Floor.java new file mode 100644 index 0000000000..d25beb2503 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/Floor.java @@ -0,0 +1,12 @@ +package com.alibaba.json.bvtVO.ae.huangliang2; + + +import com.alibaba.fastjson.annotation.JSONType; + +/** + * Created by huangliang on 17/5/8. + */ + +public interface Floor extends Area { + +} diff --git a/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/FloorPageData.java b/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/FloorPageData.java new file mode 100644 index 0000000000..a2f964f089 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/FloorPageData.java @@ -0,0 +1,11 @@ +package com.alibaba.json.bvtVO.ae.huangliang2; + +import java.util.List; + +/** + * Created by huangliang on 17/5/8. + */ + +public class FloorPageData { + public List areas; +} diff --git a/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/FloorV1.java b/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/FloorV1.java new file mode 100644 index 0000000000..5be228cd89 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/FloorV1.java @@ -0,0 +1,18 @@ +package com.alibaba.json.bvtVO.ae.huangliang2; + +import com.alibaba.fastjson.annotation.JSONType; + +/** + * Created by huangliang on 17/5/8. + */ +@JSONType(typeName = "floorV1") +public class FloorV1 implements Floor { + + public String type; + public String templateId; + + @Override + public String getName() { + return templateId; + } +} diff --git a/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/FloorV2.java b/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/FloorV2.java new file mode 100644 index 0000000000..23a6e0747c --- /dev/null +++ b/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/FloorV2.java @@ -0,0 +1,18 @@ +package com.alibaba.json.bvtVO.ae.huangliang2; + +import com.alibaba.fastjson.annotation.JSONType; + +/** + * Created by huangliang on 17/5/8. + */ +@JSONType(typeName = "floorV2") +public class FloorV2 implements Floor { + public String type; + + public String templateId; + + @Override + public String getName() { + return templateId; + } +} diff --git a/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/MockResult.java b/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/MockResult.java new file mode 100644 index 0000000000..d14d02b89f --- /dev/null +++ b/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/MockResult.java @@ -0,0 +1,12 @@ +package com.alibaba.json.bvtVO.ae.huangliang2; + +import com.alibaba.fastjson.JSONObject; + +/** + * Created by huangliang on 17/5/9. + */ + +public class MockResult { + boolean isTest; + public JSONObject mockResult; +} diff --git a/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/NetResponse.java b/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/NetResponse.java new file mode 100644 index 0000000000..6d8a1a9cb6 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/NetResponse.java @@ -0,0 +1,23 @@ +package com.alibaba.json.bvtVO.ae.huangliang2; + +import com.alibaba.fastjson.JSONObject; + +/** + * Created by huangliang on 17/5/9. + */ + +public class NetResponse { + public Head head; + + public static class Head { + public String message; + public String code; + public String serverErrorCode; + public long serverTime; + public String traceId; + public String op; + public String ab; + } + + public JSONObject body; +} diff --git a/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/Section.java b/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/Section.java new file mode 100644 index 0000000000..54bd94b88e --- /dev/null +++ b/src/test/java/com/alibaba/json/bvtVO/ae/huangliang2/Section.java @@ -0,0 +1,22 @@ +package com.alibaba.json.bvtVO.ae.huangliang2; + +import com.alibaba.fastjson.annotation.JSONType; + +import java.util.List; + +/** + * Created by huangliang on 17/5/8. + */ +@JSONType(typeName = "section") +public class Section implements Area { + public List children; + + public String type; + + public String templateId; + + @Override + public String getName() { + return templateId; + } +} diff --git a/src/test/java/com/alibaba/json/bvtVO/vip_com/QueryLoanOrderRsp.java b/src/test/java/com/alibaba/json/bvtVO/vip_com/QueryLoanOrderRsp.java new file mode 100755 index 0000000000..93f14dd831 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvtVO/vip_com/QueryLoanOrderRsp.java @@ -0,0 +1,98 @@ +package com.alibaba.json.bvtVO.vip_com; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; + +public class QueryLoanOrderRsp { + private String loan_card_no; + private String loan_prod_code; + private String last_row_type;//最后一条记录类型 + private String last_row_key;//最后一条记录键值 + private String nextpage_flag;//是否有下一页标志 + private List txn_list; + + + + public QueryLoanOrderRsp() { + super(); + } + + public String getLoan_card_no() { + return loan_card_no; + } + + public void setLoan_card_no(String loan_card_no) { + this.loan_card_no = loan_card_no; + } + + public String getLoan_prod_code() { + return loan_prod_code; + } + + public void setLoan_prod_code(String loan_prod_code) { + this.loan_prod_code = loan_prod_code; + } + + public String getLast_row_type() { + return last_row_type; + } + + public void setLast_row_type(String last_row_type) { + this.last_row_type = last_row_type; + } + + public String getLast_row_key() { + return last_row_key; + } + + public void setLast_row_key(String last_row_key) { + this.last_row_key = last_row_key; + } + + public String getNextpage_flag() { + return nextpage_flag; + } + + public void setNextpage_flag(String nextpage_flag) { + this.nextpage_flag = nextpage_flag; + } + + public List getTxn_list() { + return txn_list; + } + + public void setTxn_list(List txn_list) { + this.txn_list = txn_list; + } + + public static void main(String[] args) { + QueryLoanOrderRsp rsp = new QueryLoanOrderRsp(); + + rsp.setLast_row_key("A"); + List txn_list = new ArrayList(); + TxnListItsm itsm = new TxnListItsm(); + itsm.setAssets_no("B"); + itsm.setCover_vol(new BigDecimal("300")); + txn_list.add(itsm); + rsp.setTxn_list(txn_list); + + String txt = JSON.toJSONString(rsp); + System.out.println(txt); + + String txt2 = JSON.toJSONString(txn_list); + System.out.println(txt2); + + List itsms = JSON.parseObject(txt2, + new TypeReference>(){}); + System.out.println(itsms); + + rsp = JSON.parseObject(txt, + new TypeReference(){}); + + System.out.println(rsp); + } +} diff --git a/src/test/java/com/alibaba/json/bvtVO/vip_com/TxnListItsm.java b/src/test/java/com/alibaba/json/bvtVO/vip_com/TxnListItsm.java new file mode 100755 index 0000000000..96b131a9e0 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvtVO/vip_com/TxnListItsm.java @@ -0,0 +1,25 @@ +package com.alibaba.json.bvtVO.vip_com; + +import java.math.BigDecimal; + +public class TxnListItsm { + private String assets_no; + private BigDecimal cover_vol; + + public String getAssets_no() { + return assets_no; + } + + public void setAssets_no(String assets_no) { + this.assets_no = assets_no; + } + + public BigDecimal getCover_vol() { + return cover_vol; + } + + public void setCover_vol(BigDecimal cover_vol) { + this.cover_vol = cover_vol; + } + +} \ No newline at end of file