mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-05 17:37:59 +08:00
fix bug
This commit is contained in:
parent
d141efea62
commit
5b2d2050d2
@ -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
|
||||
|
||||
|
@ -55,7 +55,7 @@ public abstract class AbstractConverter<T> implements Converter<T>, 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(
|
||||
|
@ -80,7 +80,7 @@ public class JSONConverter implements Converter<JSON> {
|
||||
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);
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
|
||||
|
@ -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之前,</div>中的/会被转义,修复此bug的单元测试
|
||||
String jsonStr = "{\"a\":\"<div>aaa</div>\"}";
|
||||
final String jsonStr = "{\"a\":\"<div>aaa</div>\"}";
|
||||
//noinspection MismatchedQueryAndUpdateOfCollection
|
||||
JSONObject json = new JSONObject(jsonStr);
|
||||
final JSONObject json = new JSONObject(jsonStr);
|
||||
Assert.assertEquals("<div>aaa</div>", 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<CaseReport> caseReports = bean.getCaseReports();
|
||||
CaseReport caseReport = caseReports.get(0);
|
||||
final List<CaseReport> caseReports = bean.getCaseReports();
|
||||
final CaseReport caseReport = caseReports.get(0);
|
||||
Assert.assertNotNull(caseReport);
|
||||
|
||||
// 第二层
|
||||
List<StepReport> stepReports = caseReports.get(0).getStepReports();
|
||||
StepReport stepReport = stepReports.get(0);
|
||||
final List<StepReport> 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<String, Object> map = new HashMap<>();
|
||||
final Map<String, Object> 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");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user