diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/copier/CopyOptions.java b/hutool-core/src/main/java/cn/hutool/core/bean/copier/CopyOptions.java index 122ade5d5..d083b5f43 100755 --- a/hutool-core/src/main/java/cn/hutool/core/bean/copier/CopyOptions.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/copier/CopyOptions.java @@ -6,6 +6,8 @@ import cn.hutool.core.lang.Editor; import cn.hutool.core.lang.func.Func1; import cn.hutool.core.lang.func.LambdaUtil; import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.ReflectUtil; import java.io.Serializable; import java.lang.reflect.Field; @@ -70,8 +72,19 @@ public class CopyOptions implements Serializable { /** * 自定义类型转换器,默认使用全局万能转换器转换 */ - protected TypeConverter converter = (type, value) -> - Convert.convertWithCheck(type, value, null, ignoreError); + protected TypeConverter converter = (type, value) -> { + if(null == value){ + return null; + } + + final String name = value.getClass().getName(); + if(ArrayUtil.contains(new String[]{"cn.hutool.json.JSONObject", "cn.hutool.json.JSONArray"}, name)){ + // 由于设计缺陷导致JSON转Bean时无法使用自定义的反序列化器,此处采用反射方式修复bug,此类问题会在6.x解决 + return ReflectUtil.invoke(value, "toBean", ObjectUtil.defaultIfNull(type, Object.class)); + } + + return Convert.convertWithCheck(type, value, null, ignoreError); + }; //region create diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java index c72521150..401291411 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java @@ -55,7 +55,7 @@ public abstract class AbstractConverter implements Converter, Serializable // 除Map外,已经是目标类型,不需要转换(Map类型涉及参数类型,需要单独转换) return targetType.cast(value); } - T result = convertInternal(value); + final T result = convertInternal(value); return ((null == result) ? defaultValue : result); } else { throw new IllegalArgumentException( diff --git a/hutool-json/src/main/java/cn/hutool/json/JSONConverter.java b/hutool-json/src/main/java/cn/hutool/json/JSONConverter.java index 46239c4ed..a6ef5c2c9 100644 --- a/hutool-json/src/main/java/cn/hutool/json/JSONConverter.java +++ b/hutool-json/src/main/java/cn/hutool/json/JSONConverter.java @@ -80,7 +80,7 @@ public class JSONConverter implements Converter { final Class clazz = (Class) targetType; if (JSONBeanParser.class.isAssignableFrom(clazz)){ @SuppressWarnings("rawtypes") - JSONBeanParser target = (JSONBeanParser) ReflectUtil.newInstanceIfPossible(clazz); + final JSONBeanParser target = (JSONBeanParser) ReflectUtil.newInstanceIfPossible(clazz); if(null == target){ throw new ConvertException("Can not instance [{}]", targetType); } diff --git a/hutool-json/src/test/java/Issue2555Test.java b/hutool-json/src/test/java/Issue2555Test.java index 25908b9ab..291b3b813 100755 --- a/hutool-json/src/test/java/Issue2555Test.java +++ b/hutool-json/src/test/java/Issue2555Test.java @@ -1,4 +1,5 @@ import cn.hutool.json.JSON; +import cn.hutool.json.JSONConfig; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import cn.hutool.json.serialize.JSONDeserializer; @@ -23,7 +24,20 @@ public class Issue2555Test { Assert.assertEquals("{\"myType\":{\"addr\":\"addrValue1\"}}", json); //MyDeserializer不会被调用 - final SimpleObj simpleObj2 = JSONUtil.toBean(json, SimpleObj.class); + final JSONObject jsonObject = JSONUtil.parseObj(json, JSONConfig.create().setIgnoreError(false)); + final SimpleObj simpleObj2 = jsonObject.toBean(SimpleObj.class); + Assert.assertEquals("addrValue1", simpleObj2.getMyType().getAddress()); + } + + @Test + public void deserTest(){ + JSONUtil.putDeserializer(MyType.class, new MyDeserializer()); + + final String jsonStr = "{\"myType\":{\"addr\":\"addrValue1\"}}"; + + //MyDeserializer不会被调用 + final JSONObject jsonObject = JSONUtil.parseObj(jsonStr, JSONConfig.create().setIgnoreError(false)); + final SimpleObj simpleObj2 = jsonObject.toBean(SimpleObj.class); Assert.assertEquals("addrValue1", simpleObj2.getMyType().getAddress()); } diff --git a/hutool-json/src/test/java/cn/hutool/json/JSONObjectTest.java b/hutool-json/src/test/java/cn/hutool/json/JSONObjectTest.java index 45ebaa5dd..724bb54ac 100755 --- a/hutool-json/src/test/java/cn/hutool/json/JSONObjectTest.java +++ b/hutool-json/src/test/java/cn/hutool/json/JSONObjectTest.java @@ -50,8 +50,8 @@ public class JSONObjectTest { @Test @Ignore public void toStringTest() { - String str = "{\"code\": 500, \"data\":null}"; - JSONObject jsonObject = new JSONObject(str); + final String str = "{\"code\": 500, \"data\":null}"; + final JSONObject jsonObject = new JSONObject(str); Console.log(jsonObject); jsonObject.getConfig().setIgnoreNullValue(true); Console.log(jsonObject.toStringPretty()); @@ -59,9 +59,9 @@ public class JSONObjectTest { @Test public void toStringTest2() { - String str = "{\"test\":\"关于开展2018年度“文明集体”、“文明职工”评选表彰活动的通知\"}"; + final String str = "{\"test\":\"关于开展2018年度“文明集体”、“文明职工”评选表彰活动的通知\"}"; //noinspection MismatchedQueryAndUpdateOfCollection - JSONObject json = new JSONObject(str); + final JSONObject json = new JSONObject(str); Assert.assertEquals(str, json.toString()); } @@ -70,7 +70,7 @@ public class JSONObjectTest { */ @Test public void toStringTest3() { - JSONObject json = Objects.requireNonNull(JSONUtil.createObj()// + final JSONObject json = Objects.requireNonNull(JSONUtil.createObj()// .set("dateTime", DateUtil.parse("2019-05-02 22:12:01")))// .setDateFormat(DatePattern.NORM_DATE_PATTERN); Assert.assertEquals("{\"dateTime\":\"2019-05-02\"}", json.toString()); @@ -89,13 +89,13 @@ public class JSONObjectTest { @Test public void putAllTest() { - JSONObject json1 = JSONUtil.createObj() + final JSONObject json1 = JSONUtil.createObj() .set("a", "value1") .set("b", "value2") .set("c", "value3") .set("d", true); - JSONObject json2 = JSONUtil.createObj() + final JSONObject json2 = JSONUtil.createObj() .set("a", "value21") .set("b", "value22"); @@ -109,8 +109,8 @@ public class JSONObjectTest { @Test public void parseStringTest() { - String jsonStr = "{\"b\":\"value2\",\"c\":\"value3\",\"a\":\"value1\", \"d\": true, \"e\": null}"; - JSONObject jsonObject = JSONUtil.parseObj(jsonStr); + final String jsonStr = "{\"b\":\"value2\",\"c\":\"value3\",\"a\":\"value1\", \"d\": true, \"e\": null}"; + final JSONObject jsonObject = JSONUtil.parseObj(jsonStr); Assert.assertEquals(jsonObject.get("a"), "value1"); Assert.assertEquals(jsonObject.get("b"), "value2"); Assert.assertEquals(jsonObject.get("c"), "value3"); @@ -122,57 +122,57 @@ public class JSONObjectTest { @Test public void parseStringTest2() { - String jsonStr = "{\"file_name\":\"RMM20180127009_731.000\",\"error_data\":\"201121151350701001252500000032 18973908335 18973908335 13601893517 201711211700152017112115135420171121 6594000000010100000000000000000000000043190101701001910072 100001100 \",\"error_code\":\"F140\",\"error_info\":\"最早发送时间格式错误,该字段可以为空,当不为空时正确填写格式为“YYYYMMDDHHMISS”\",\"app_name\":\"inter-pre-check\"}"; + final String jsonStr = "{\"file_name\":\"RMM20180127009_731.000\",\"error_data\":\"201121151350701001252500000032 18973908335 18973908335 13601893517 201711211700152017112115135420171121 6594000000010100000000000000000000000043190101701001910072 100001100 \",\"error_code\":\"F140\",\"error_info\":\"最早发送时间格式错误,该字段可以为空,当不为空时正确填写格式为“YYYYMMDDHHMISS”\",\"app_name\":\"inter-pre-check\"}"; //noinspection MismatchedQueryAndUpdateOfCollection - JSONObject json = new JSONObject(jsonStr); + final JSONObject json = new JSONObject(jsonStr); Assert.assertEquals("F140", json.getStr("error_code")); Assert.assertEquals("最早发送时间格式错误,该字段可以为空,当不为空时正确填写格式为“YYYYMMDDHHMISS”", json.getStr("error_info")); } @Test public void parseStringTest3() { - String jsonStr = "{\"test\":\"体”、“文\"}"; + final String jsonStr = "{\"test\":\"体”、“文\"}"; //noinspection MismatchedQueryAndUpdateOfCollection - JSONObject json = new JSONObject(jsonStr); + final JSONObject json = new JSONObject(jsonStr); Assert.assertEquals("体”、“文", json.getStr("test")); } @Test public void parseStringTest4() { - String jsonStr = "{'msg':'这里还没有内容','data':{'cards':[]},'ok':0}"; + final String jsonStr = "{'msg':'这里还没有内容','data':{'cards':[]},'ok':0}"; //noinspection MismatchedQueryAndUpdateOfCollection - JSONObject json = new JSONObject(jsonStr); + final JSONObject json = new JSONObject(jsonStr); Assert.assertEquals(new Integer(0), json.getInt("ok")); Assert.assertEquals(new JSONArray(), json.getJSONObject("data").getJSONArray("cards")); } @Test public void parseBytesTest() { - String jsonStr = "{'msg':'这里还没有内容','data':{'cards':[]},'ok':0}"; + final String jsonStr = "{'msg':'这里还没有内容','data':{'cards':[]},'ok':0}"; //noinspection MismatchedQueryAndUpdateOfCollection - JSONObject json = new JSONObject(jsonStr.getBytes(StandardCharsets.UTF_8)); + final JSONObject json = new JSONObject(jsonStr.getBytes(StandardCharsets.UTF_8)); Assert.assertEquals(new Integer(0), json.getInt("ok")); Assert.assertEquals(new JSONArray(), json.getJSONObject("data").getJSONArray("cards")); } @Test public void parseReaderTest() { - String jsonStr = "{'msg':'这里还没有内容','data':{'cards':[]},'ok':0}"; + final String jsonStr = "{'msg':'这里还没有内容','data':{'cards':[]},'ok':0}"; final StringReader stringReader = new StringReader(jsonStr); //noinspection MismatchedQueryAndUpdateOfCollection - JSONObject json = new JSONObject(stringReader); + final JSONObject json = new JSONObject(stringReader); Assert.assertEquals(new Integer(0), json.getInt("ok")); Assert.assertEquals(new JSONArray(), json.getJSONObject("data").getJSONArray("cards")); } @Test public void parseInputStreamTest() { - String jsonStr = "{'msg':'这里还没有内容','data':{'cards':[]},'ok':0}"; + final String jsonStr = "{'msg':'这里还没有内容','data':{'cards':[]},'ok':0}"; final ByteArrayInputStream in = new ByteArrayInputStream(jsonStr.getBytes(StandardCharsets.UTF_8)); //noinspection MismatchedQueryAndUpdateOfCollection - JSONObject json = new JSONObject(in); + final JSONObject json = new JSONObject(in); Assert.assertEquals(new Integer(0), json.getInt("ok")); Assert.assertEquals(new JSONArray(), json.getJSONObject("data").getJSONArray("cards")); } @@ -180,9 +180,9 @@ public class JSONObjectTest { @Test @Ignore public void parseStringWithBomTest() { - String jsonStr = FileUtil.readUtf8String("f:/test/jsontest.txt"); - JSONObject json = new JSONObject(jsonStr); - JSONObject json2 = JSONUtil.parseObj(json); + final String jsonStr = FileUtil.readUtf8String("f:/test/jsontest.txt"); + final JSONObject json = new JSONObject(jsonStr); + final JSONObject json2 = JSONUtil.parseObj(json); Console.log(json); Console.log(json2); } @@ -190,23 +190,23 @@ public class JSONObjectTest { @Test public void parseStringWithSlashTest() { //在5.3.2之前,中的/会被转义,修复此bug的单元测试 - String jsonStr = "{\"a\":\"
aaa
\"}"; + final String jsonStr = "{\"a\":\"
aaa
\"}"; //noinspection MismatchedQueryAndUpdateOfCollection - JSONObject json = new JSONObject(jsonStr); + final JSONObject json = new JSONObject(jsonStr); Assert.assertEquals("
aaa
", json.get("a")); Assert.assertEquals(jsonStr, json.toString()); } @Test public void toBeanTest() { - JSONObject subJson = JSONUtil.createObj().set("value1", "strValue1").set("value2", "234"); - JSONObject json = JSONUtil.createObj().set("strValue", "strTest").set("intValue", 123) + final JSONObject subJson = JSONUtil.createObj().set("value1", "strValue1").set("value2", "234"); + final JSONObject json = JSONUtil.createObj().set("strValue", "strTest").set("intValue", 123) // 测试空字符串转对象 .set("doubleValue", "") .set("beanValue", subJson) .set("list", JSONUtil.createArray().set("a").set("b")).set("testEnum", "TYPE_A"); - TestBean bean = json.toBean(TestBean.class); + final TestBean bean = json.toBean(TestBean.class); Assert.assertEquals("a", bean.getList().get(0)); Assert.assertEquals("b", bean.getList().get(1)); @@ -219,14 +219,14 @@ public class JSONObjectTest { @Test public void toBeanNullStrTest() { - JSONObject json = JSONUtil.createObj()// + final JSONObject json = JSONUtil.createObj()// .set("strValue", "null")// .set("intValue", 123)// // 子对象对应"null"字符串,如果忽略错误,跳过,否则抛出转换异常 .set("beanValue", "null")// .set("list", JSONUtil.createArray().set("a").set("b")); - TestBean bean = json.toBean(TestBean.class, true); + final TestBean bean = json.toBean(TestBean.class, true); // 当JSON中为字符串"null"时应被当作字符串处理 Assert.assertEquals("null", bean.getStrValue()); // 当JSON中为字符串"null"时Bean中的字段类型不匹配应在ignoreError模式下忽略注入 @@ -235,14 +235,14 @@ public class JSONObjectTest { @Test public void toBeanTest2() { - UserA userA = new UserA(); + final UserA userA = new UserA(); userA.setA("A user"); userA.setName("{\n\t\"body\":{\n\t\t\"loginId\":\"id\",\n\t\t\"password\":\"pwd\"\n\t}\n}"); userA.setDate(new Date()); userA.setSqs(CollectionUtil.newArrayList(new Seq("seq1"), new Seq("seq2"))); - JSONObject json = JSONUtil.parseObj(userA); - UserA userA2 = json.toBean(UserA.class); + final JSONObject json = JSONUtil.parseObj(userA); + final UserA userA2 = json.toBean(UserA.class); // 测试数组 Assert.assertEquals("seq1", userA2.getSqs().get(0).getSeq()); // 测试带换行符等特殊字符转换是否成功 @@ -251,33 +251,33 @@ public class JSONObjectTest { @Test public void toBeanWithNullTest() { - String jsonStr = "{'data':{'userName':'ak','password': null}}"; - UserWithMap user = JSONUtil.toBean(JSONUtil.parseObj(jsonStr), UserWithMap.class); + final String jsonStr = "{'data':{'userName':'ak','password': null}}"; + final UserWithMap user = JSONUtil.toBean(JSONUtil.parseObj(jsonStr), UserWithMap.class); Assert.assertTrue(user.getData().containsKey("password")); } @Test public void toBeanTest4() { - String json = "{\"data\":{\"b\": \"c\"}}"; + final String json = "{\"data\":{\"b\": \"c\"}}"; - UserWithMap map = JSONUtil.toBean(json, UserWithMap.class); + final UserWithMap map = JSONUtil.toBean(json, UserWithMap.class); Assert.assertEquals("c", map.getData().get("b")); } @Test public void toBeanTest5() { - String readUtf8Str = ResourceUtil.readUtf8Str("suiteReport.json"); - JSONObject json = JSONUtil.parseObj(readUtf8Str); - SuiteReport bean = json.toBean(SuiteReport.class); + final String readUtf8Str = ResourceUtil.readUtf8Str("suiteReport.json"); + final JSONObject json = JSONUtil.parseObj(readUtf8Str); + final SuiteReport bean = json.toBean(SuiteReport.class); // 第一层 - List caseReports = bean.getCaseReports(); - CaseReport caseReport = caseReports.get(0); + final List caseReports = bean.getCaseReports(); + final CaseReport caseReport = caseReports.get(0); Assert.assertNotNull(caseReport); // 第二层 - List stepReports = caseReports.get(0).getStepReports(); - StepReport stepReport = stepReports.get(0); + final List stepReports = caseReports.get(0).getStepReports(); + final StepReport stepReport = stepReports.get(0); Assert.assertNotNull(stepReport); } @@ -286,18 +286,18 @@ public class JSONObjectTest { */ @Test public void toBeanTest6() { - JSONObject json = JSONUtil.createObj() + final JSONObject json = JSONUtil.createObj() .set("targetUrl", "http://test.com") .set("success", "true") .set("result", JSONUtil.createObj() .set("token", "tokenTest") .set("userId", "测试用户1")); - TokenAuthWarp2 bean = json.toBean(TokenAuthWarp2.class); + final TokenAuthWarp2 bean = json.toBean(TokenAuthWarp2.class); Assert.assertEquals("http://test.com", bean.getTargetUrl()); Assert.assertEquals("true", bean.getSuccess()); - TokenAuthResponse result = bean.getResult(); + final TokenAuthResponse result = bean.getResult(); Assert.assertNotNull(result); Assert.assertEquals("tokenTest", result.getToken()); Assert.assertEquals("测试用户1", result.getUserId()); @@ -309,21 +309,21 @@ public class JSONObjectTest { */ @Test public void toBeanTest7() { - String jsonStr = " {\"result\":{\"phone\":\"15926297342\",\"appKey\":\"e1ie12e1ewsdqw1\"," + + final String jsonStr = " {\"result\":{\"phone\":\"15926297342\",\"appKey\":\"e1ie12e1ewsdqw1\"," + "\"secret\":\"dsadadqwdqs121d1e2\",\"message\":\"hello world\"},\"code\":100,\"" + "message\":\"validate message\"}"; - ResultDto dto = JSONUtil.toBean(jsonStr, ResultDto.class); + final ResultDto dto = JSONUtil.toBean(jsonStr, ResultDto.class); Assert.assertEquals("validate message", dto.getMessage()); } @Test public void parseBeanTest() { - UserA userA = new UserA(); + final UserA userA = new UserA(); userA.setName("nameTest"); userA.setDate(new Date()); userA.setSqs(CollectionUtil.newArrayList(new Seq(null), new Seq("seq2"))); - JSONObject json = JSONUtil.parseObj(userA, false); + final JSONObject json = JSONUtil.parseObj(userA, false); Assert.assertTrue(json.containsKey("a")); Assert.assertTrue(json.getJSONArray("sqs").getJSONObject(0).containsKey("seq")); @@ -331,28 +331,28 @@ public class JSONObjectTest { @Test public void parseBeanTest2() { - TestBean bean = new TestBean(); + final TestBean bean = new TestBean(); bean.setDoubleValue(111.1); bean.setIntValue(123); bean.setList(CollUtil.newArrayList("a", "b", "c")); bean.setStrValue("strTest"); bean.setTestEnum(TestEnum.TYPE_B); - JSONObject json = JSONUtil.parseObj(bean, false); + final JSONObject json = JSONUtil.parseObj(bean, false); // 枚举转换检查 Assert.assertEquals("TYPE_B", json.get("testEnum")); - TestBean bean2 = json.toBean(TestBean.class); + final TestBean bean2 = json.toBean(TestBean.class); Assert.assertEquals(bean.toString(), bean2.toString()); } @Test public void parseBeanTest3() { - JSONObject json = JSONUtil.createObj() + final JSONObject json = JSONUtil.createObj() .set("code", 22) .set("data", "{\"jobId\": \"abc\", \"videoUrl\": \"http://a.com/a.mp4\"}"); - JSONBean bean = json.toBean(JSONBean.class); + final JSONBean bean = json.toBean(JSONBean.class); Assert.assertEquals(22, bean.getCode()); Assert.assertEquals("abc", bean.getData().getObj("jobId")); Assert.assertEquals("http://a.com/a.mp4", bean.getData().getObj("videoUrl")); @@ -360,13 +360,13 @@ public class JSONObjectTest { @Test public void beanTransTest() { - UserA userA = new UserA(); + final UserA userA = new UserA(); userA.setA("A user"); userA.setName("nameTest"); userA.setDate(new Date()); - JSONObject userAJson = JSONUtil.parseObj(userA); - UserB userB = JSONUtil.toBean(userAJson, UserB.class); + final JSONObject userAJson = JSONUtil.parseObj(userA); + final UserB userB = JSONUtil.toBean(userAJson, UserB.class); Assert.assertEquals(userA.getName(), userB.getName()); Assert.assertEquals(userA.getDate(), userB.getDate()); @@ -374,63 +374,63 @@ public class JSONObjectTest { @Test public void beanTransTest2() { - UserA userA = new UserA(); + final UserA userA = new UserA(); userA.setA("A user"); userA.setName("nameTest"); userA.setDate(DateUtil.parse("2018-10-25")); - JSONObject userAJson = JSONUtil.parseObj(userA); + final JSONObject userAJson = JSONUtil.parseObj(userA); // 自定义日期格式 userAJson.setDateFormat("yyyy-MM-dd"); - UserA bean = JSONUtil.toBean(userAJson.toString(), UserA.class); + final UserA bean = JSONUtil.toBean(userAJson.toString(), UserA.class); Assert.assertEquals(DateUtil.parse("2018-10-25"), bean.getDate()); } @Test public void beanTransTest3() { - JSONObject userAJson = JSONUtil.createObj() + final JSONObject userAJson = JSONUtil.createObj() .set("a", "AValue") .set("name", "nameValue") .set("date", "08:00:00"); - UserA bean = JSONUtil.toBean(userAJson.toString(), UserA.class); + final UserA bean = JSONUtil.toBean(userAJson.toString(), UserA.class); Assert.assertEquals(DateUtil.today() + " 08:00:00", DateUtil.date(bean.getDate()).toString()); } @Test public void parseFromBeanTest() { - UserA userA = new UserA(); + final UserA userA = new UserA(); userA.setA(null); userA.setName("nameTest"); userA.setDate(new Date()); - JSONObject userAJson = JSONUtil.parseObj(userA); + final JSONObject userAJson = JSONUtil.parseObj(userA); Assert.assertFalse(userAJson.containsKey("a")); - JSONObject userAJsonWithNullValue = JSONUtil.parseObj(userA, false); + final JSONObject userAJsonWithNullValue = JSONUtil.parseObj(userA, false); Assert.assertTrue(userAJsonWithNullValue.containsKey("a")); Assert.assertTrue(userAJsonWithNullValue.containsKey("sqs")); } @Test public void specialCharTest() { - String json = "{\"pattern\": \"[abc]\b\u2001\", \"pattern2Json\": {\"patternText\": \"[ab]\\b\"}}"; - JSONObject obj = JSONUtil.parseObj(json); + final String json = "{\"pattern\": \"[abc]\b\u2001\", \"pattern2Json\": {\"patternText\": \"[ab]\\b\"}}"; + final JSONObject obj = JSONUtil.parseObj(json); Assert.assertEquals("[abc]\\b\\u2001", obj.getStrEscaped("pattern")); Assert.assertEquals("{\"patternText\":\"[ab]\\b\"}", obj.getStrEscaped("pattern2Json")); } @Test public void getStrTest() { - String json = "{\"name\": \"yyb\\nbbb\"}"; - JSONObject jsonObject = JSONUtil.parseObj(json); + final String json = "{\"name\": \"yyb\\nbbb\"}"; + final JSONObject jsonObject = JSONUtil.parseObj(json); // 没有转义按照默认规则显示 Assert.assertEquals("yyb\nbbb", jsonObject.getStr("name")); // 转义按照字符串显示 Assert.assertEquals("yyb\\nbbb", jsonObject.getStrEscaped("name")); - String bbb = jsonObject.getStr("bbb", "defaultBBB"); + final String bbb = jsonObject.getStr("bbb", "defaultBBB"); Assert.assertEquals("defaultBBB", bbb); } @@ -444,7 +444,7 @@ public class JSONObjectTest { Assert.assertEquals("张三", jsonObject.getStr("name")); Assert.assertEquals(new Integer(35), jsonObject.getInt("age")); - JSONObject json = JSONUtil.createObj() + final JSONObject json = JSONUtil.createObj() .set("name", "张三") .set("age", 35); final BeanWithAlias bean = JSONUtil.toBean(Objects.requireNonNull(json).toString(), BeanWithAlias.class); @@ -454,10 +454,10 @@ public class JSONObjectTest { @Test public void setDateFormatTest() { - JSONConfig jsonConfig = JSONConfig.create(); + final JSONConfig jsonConfig = JSONConfig.create(); jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss"); - JSONObject json = new JSONObject(jsonConfig); + final JSONObject json = new JSONObject(jsonConfig); json.append("date", DateUtil.parse("2020-06-05 11:16:11")); json.append("bbb", "222"); json.append("aaa", "123"); @@ -466,16 +466,16 @@ public class JSONObjectTest { @Test public void setDateFormatTest2() { - JSONConfig jsonConfig = JSONConfig.create(); + final JSONConfig jsonConfig = JSONConfig.create(); jsonConfig.setDateFormat("yyyy#MM#dd"); - Date date = DateUtil.parse("2020-06-05 11:16:11"); - JSONObject json = new JSONObject(jsonConfig); + final Date date = DateUtil.parse("2020-06-05 11:16:11"); + final JSONObject json = new JSONObject(jsonConfig); json.set("date", date); json.set("bbb", "222"); json.set("aaa", "123"); - String jsonStr = "{\"date\":\"2020#06#05\",\"bbb\":\"222\",\"aaa\":\"123\"}"; + final String jsonStr = "{\"date\":\"2020#06#05\",\"bbb\":\"222\",\"aaa\":\"123\"}"; Assert.assertEquals(jsonStr, json.toString()); @@ -486,16 +486,16 @@ public class JSONObjectTest { @Test public void setCustomDateFormatTest() { - JSONConfig jsonConfig = JSONConfig.create(); + final JSONConfig jsonConfig = JSONConfig.create(); jsonConfig.setDateFormat("#sss"); - Date date = DateUtil.parse("2020-06-05 11:16:11"); - JSONObject json = new JSONObject(jsonConfig); + final Date date = DateUtil.parse("2020-06-05 11:16:11"); + final JSONObject json = new JSONObject(jsonConfig); json.set("date", date); json.set("bbb", "222"); json.set("aaa", "123"); - String jsonStr = "{\"date\":1591326971,\"bbb\":\"222\",\"aaa\":\"123\"}"; + final String jsonStr = "{\"date\":1591326971,\"bbb\":\"222\",\"aaa\":\"123\"}"; Assert.assertEquals(jsonStr, json.toString()); @@ -506,7 +506,7 @@ public class JSONObjectTest { @Test public void getTimestampTest() { - String timeStr = "1970-01-01 00:00:00"; + final String timeStr = "1970-01-01 00:00:00"; final JSONObject jsonObject = JSONUtil.createObj().set("time", timeStr); final Timestamp time = jsonObject.get("time", Timestamp.class); Assert.assertEquals("1970-01-01 00:00:00.0", time.toString()); @@ -605,7 +605,7 @@ public class JSONObjectTest { @Test public void floatTest() { - Map map = new HashMap<>(); + final Map map = new HashMap<>(); map.put("c", 2.0F); final String s = JSONUtil.toJsonStr(map); @@ -626,7 +626,7 @@ public class JSONObjectTest { @Test public void putByPathTest() { - JSONObject json = new JSONObject(); + final JSONObject json = new JSONObject(); json.putByPath("aa.bb", "BB"); Assert.assertEquals("{\"aa\":{\"bb\":\"BB\"}}", json.toString()); } @@ -634,8 +634,8 @@ public class JSONObjectTest { @Test public void bigDecimalTest() { - String jsonStr = "{\"orderId\":\"1704747698891333662002277\"}"; - BigDecimalBean bigDecimalBean = JSONUtil.toBean(jsonStr, BigDecimalBean.class); + final String jsonStr = "{\"orderId\":\"1704747698891333662002277\"}"; + final BigDecimalBean bigDecimalBean = JSONUtil.toBean(jsonStr, BigDecimalBean.class); Assert.assertEquals("{\"orderId\":1704747698891333662002277}", JSONUtil.toJsonStr(bigDecimalBean)); } @@ -647,7 +647,7 @@ public class JSONObjectTest { @Test public void filterIncludeTest() { - JSONObject json1 = JSONUtil.createObj(JSONConfig.create()) + final JSONObject json1 = JSONUtil.createObj(JSONConfig.create()) .set("a", "value1") .set("b", "value2") .set("c", "value3") @@ -659,7 +659,7 @@ public class JSONObjectTest { @Test public void filterExcludeTest() { - JSONObject json1 = JSONUtil.createObj(JSONConfig.create()) + final JSONObject json1 = JSONUtil.createObj(JSONConfig.create()) .set("a", "value1") .set("b", "value2") .set("c", "value3") @@ -671,7 +671,7 @@ public class JSONObjectTest { @Test public void editTest() { - JSONObject json1 = JSONUtil.createObj(JSONConfig.create()) + final JSONObject json1 = JSONUtil.createObj(JSONConfig.create()) .set("a", "value1") .set("b", "value2") .set("c", "value3") @@ -691,7 +691,7 @@ public class JSONObjectTest { @Test public void toUnderLineCaseTest() { - JSONObject json1 = JSONUtil.createObj(JSONConfig.create()) + final JSONObject json1 = JSONUtil.createObj(JSONConfig.create()) .set("aKey", "value1") .set("bJob", "value2") .set("cGood", "value3") @@ -706,7 +706,7 @@ public class JSONObjectTest { @Test public void nullToEmptyTest() { - JSONObject json1 = JSONUtil.createObj(JSONConfig.create().setIgnoreNullValue(false)) + final JSONObject json1 = JSONUtil.createObj(JSONConfig.create().setIgnoreNullValue(false)) .set("a", null) .set("b", "value2"); @@ -719,18 +719,18 @@ public class JSONObjectTest { @Test public void parseFilterTest() { - String jsonStr = "{\"b\":\"value2\",\"c\":\"value3\",\"a\":\"value1\", \"d\": true, \"e\": null}"; + final String jsonStr = "{\"b\":\"value2\",\"c\":\"value3\",\"a\":\"value1\", \"d\": true, \"e\": null}"; //noinspection MismatchedQueryAndUpdateOfCollection - JSONObject jsonObject = new JSONObject(jsonStr, null, (pair)-> "b".equals(pair.getKey())); + final JSONObject jsonObject = new JSONObject(jsonStr, null, (pair)-> "b".equals(pair.getKey())); Assert.assertEquals(1, jsonObject.size()); Assert.assertEquals("value2", jsonObject.get("b")); } @Test public void parseFilterEditTest() { - String jsonStr = "{\"b\":\"value2\",\"c\":\"value3\",\"a\":\"value1\", \"d\": true, \"e\": null}"; + final String jsonStr = "{\"b\":\"value2\",\"c\":\"value3\",\"a\":\"value1\", \"d\": true, \"e\": null}"; //noinspection MismatchedQueryAndUpdateOfCollection - JSONObject jsonObject = new JSONObject(jsonStr, null, (pair)-> { + final JSONObject jsonObject = new JSONObject(jsonStr, null, (pair)-> { if("b".equals(pair.getKey())){ pair.setValue(pair.getValue() + "_edit"); }