WangHan
2024-09-12 d5855a4926926698b740bc6c7ba489de47adb68b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package tech.powerjob.common.serialize;
 
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.SneakyThrows;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
 
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Map;
 
/**
 * test json utils
 *
 * @author tjq
 * @since 2024/3/16
 */
@Slf4j
class JsonUtilsTest {
 
    @Test
    @SneakyThrows
    void simpleTest() {
        Person person = new Person().setName("mubao").setAge(18);
        String jsonString = JsonUtils.toJSONString(person);
        log.info("[JsonUtilsTest] person: {}, jsonString: {}", person, jsonString);
        assert jsonString != null;
        Person person2 = JsonUtils.parseObject(jsonString, Person.class);
        assert person2.equals(person);
    }
 
    @Test
    @SneakyThrows
    void testAdvanceApi() {
        PersonPlus personPlus = new PersonPlus();
        personPlus.setName("gongbao").setAge(3);
        personPlus.setBirthDay(LocalDateTime.now());
 
        String jsonString = JsonUtils.toJSONString(personPlus);
        PersonPlus personPlus2 = JsonUtils.parseObject(jsonString, PersonPlus.class);
        assert personPlus2.equals(personPlus);
    }
 
    @Test
    @SneakyThrows
    void testMoreOrLessFields() {
        PersonPlus personPlus = new PersonPlus().setBirthDay(LocalDateTime.now());
        personPlus.setName("gongbao").setAge(3);
 
        String originJsonStr = JsonUtils.toJSONString(personPlus);
 
        Map<String, Object> personPlusMapMore = JsonUtils.parseMap(originJsonStr);
        personPlusMapMore.put("extraKey", System.currentTimeMillis());
 
        PersonPlus personPlusByMoreFieldsJsonStr = JsonUtils.parseObject(JsonUtils.toJSONString(personPlusMapMore), PersonPlus.class);
        assert personPlusByMoreFieldsJsonStr.equals(personPlus);
 
        Map<String, Object> personPlusMapLess = JsonUtils.parseMap(originJsonStr);
        personPlusMapLess.remove("birthDay");
 
        PersonPlus personPlusByLessFieldsJsonStr = JsonUtils.parseObject(JsonUtils.toJSONString(personPlusMapLess), PersonPlus.class);
        assert personPlusByLessFieldsJsonStr.getName().equals(personPlus.getName());
        assert personPlusByLessFieldsJsonStr.getAge().equals(personPlus.getAge());
    }
 
    @Data
    @Accessors(chain = true)
    static class Person implements Serializable {
        private String name;
        private Integer age;
    }
 
    @Data
    @Accessors(chain = true)
    @EqualsAndHashCode(callSuper = true)
    static class PersonPlus extends Person {
        private LocalDateTime birthDay;
    }
}