/** * Adds a list of excluded path queries. */ public JsonSerializer exclude(final String... excludes) { for (String exclude : excludes) { exclude(exclude); } return this; }
@Test void testGeneralMapDeserialization() { JsonParser.Defaults.classMetadataName = "class"; JsonSerializer.Defaults.classMetadataName = "class"; JsonParsers.forEachParser(jsonParser -> { String json = new JsonSerializer().exclude("*.class").serialize(creator.createJodder()); Map<String, Object> deserialized = jsonParser.parse(json); assertEquals("Igor", deserialized.get("firstname")); assertEquals("Spasic", deserialized.get("lastname")); assertTrue(Map.class.isAssignableFrom(deserialized.get("work").getClass())); assertTrue(Map.class.isAssignableFrom(deserialized.get("home").getClass())); }); }
jsonSerializer.exclude("list"); // not applied jsonSerializer.include("array");
@Test void testExcludeAll() { JsonSerializer serializer = new JsonSerializer(); String json = serializer.exclude("*").serialize(jodder); assertEquals("{}", json); }
@Test void testDates() { JsonSerializer serializer = new JsonSerializer(); String peopleJson = serializer.exclude("home", "work").serialize(jodder); assertAttribute("firstname", peopleJson); assertStringValue("Igor", peopleJson); assertNumber(jodder.getBirthdate().getTime(), peopleJson); assertStringValueMissing("java.util.Date", peopleJson); }
@Test void testListSerialization() { JsonParser.Defaults.classMetadataName = "class"; JsonSerializer.Defaults.classMetadataName = "class"; Person modesty = creator.createModesty(); Person igor = creator.createJodder(); Person pedro = creator.createPedro(); List<Person> list = new ArrayList<>(3); list.add(modesty); list.add(igor); list.add(pedro); JsonParsers.forEachParser(jsonParser -> { String json = new JsonSerializer().serialize(list); List<Person> people = jsonParser.parse(json); assertTrue(people instanceof List); json = new JsonSerializer().exclude("*.class").serialize(list); people = jsonParser.map("values", Person.class).parse(json); assertEquals(3, people.size()); assertEquals(Person.class, people.get(0).getClass()); }); JsonParsers.forEachParser(jsonParser -> { String json = new JsonSerializer().exclude("*.class").serialize(list); List<Map> peopleMap = jsonParser.parse(json); assertEquals(3, peopleMap.size()); assertTrue(peopleMap.get(0) instanceof Map); }); }
@Test void testExcludingPublicFields() { Spiderman spiderman = new Spiderman(); String json = new JsonSerializer().exclude("superpower").serialize(spiderman); assertAttributeMissing("superpower", json); assertAttribute("spideySense", json); }
@Test void testListDeserializationNoClass() { JsonParser.Defaults.classMetadataName = "class"; JsonSerializer.Defaults.classMetadataName = "class"; JsonParsers.forEachParser(jsonParser -> { Person modesty = creator.createModesty(); Person igor = creator.createJodder(); Person pedro = creator.createPedro(); List<Person> list = new ArrayList<>(3); list.add(modesty); list.add(igor); list.add(pedro); String json = new JsonSerializer().exclude("*.class").serialize(list); List<Person> people = jsonParser.map("values", Person.class).parse(json); assertEquals(3, list.size()); assertEquals(modesty.getFirstname(), list.get(0).getFirstname()); assertEquals(igor.getFirstname(), list.get(1).getFirstname()); assertEquals(pedro.getFirstname(), list.get(2).getFirstname()); }); }
@Test void testWildcards() { JsonSerializer.Defaults.classMetadataName = "class"; JsonSerializer serializer = new JsonSerializer(); String json = serializer.include("phones").exclude("*.class").serialize(jodder); assertAttributeMissing("class", json); assertAttribute("phones", json); assertAttributeMissing("hobbies", json); }
@Test void testNoHintsButClassesForCollection() { JsonParser.Defaults.classMetadataName = "class"; JsonSerializer.Defaults.classMetadataName = "class"; JsonParsers.forEachParser(jsonParser -> { Hero superman = creator.createSuperman(); String json = new JsonSerializer() .exclude("*.class") .include("powers.class") .serialize(superman); Hero jsonSuperMan = jsonParser.parse(json, Hero.class); assertHeroHasSuperPowers(jsonSuperMan); }); }
@Test void testDeepSerializationWithExcludes() { JsonSerializer serializer = new JsonSerializer(); String peopleJson = serializer.exclude("people.work").deep(true).serialize(network); assertAttribute("firstname", peopleJson); assertStringValue("Igor", peopleJson); assertAttributeMissing("work", peopleJson); assertStringValue("173 Hackers Drive", peopleJson); assertAttribute("home", peopleJson); assertAttribute("phones", peopleJson); }
@Test void testListOfObjects() { JsonSerializer.Defaults.classMetadataName = "class"; JsonSerializer serializer = new JsonSerializer(); String peopleJson = serializer.serialize(people); assertStringValue(Person.class.getName(), peopleJson); assertAttribute("firstname", peopleJson); assertStringValue("Igor", peopleJson); assertStringValue("Modesty", peopleJson); assertAttribute("lastname", peopleJson); assertStringValue("Spasic", peopleJson); assertStringValue(Address.class.getName(), peopleJson); assertStringValue("Pedro", peopleJson); assertStringValue("Sanchez", peopleJson); serializer = new JsonSerializer().exclude("home", "work"); peopleJson = serializer.serialize(people); assertStringValue(Person.class.getName(), peopleJson); assertAttribute("firstname", peopleJson); assertStringValue("Igor", peopleJson); assertStringValue("Modesty", peopleJson); assertAttribute("lastname", peopleJson); assertStringValue("Spasic", peopleJson); assertStringValueMissing(Address.class.getName(), peopleJson); }
jdrSerializer.exclude("home", "work"); String modestyJson = jdrSerializer.serialize(modesty); assertStringValue(Person.class.getName(), modestyJson); assertAttributeMissing("person", modestyJson); serializer.exclude("home.zipcode", "work.zipcode"); assertStringValueMissing("PAGER", json2); serializer.include("hobbies").exclude(true, "phones.areaCode", "phones.exchange", "phones.number");
@Test void testMixedWildcards() { JsonSerializer serializer = new JsonSerializer(); serializer.include("firstname", "lastname").exclude("*"); String json = serializer.serialize(jodder); assertAttribute("firstname", json); assertStringValue("Igor", json); assertAttribute("lastname", json); assertStringValue("Spasic", json); assertAttributeMissing("class", json); assertAttributeMissing("phones", json); assertAttributeMissing("birthdate", json); serializer = new JsonSerializer(); serializer.include("firstname", "lastname", "phones.areaCode", "phones.exchange", "phones.number").exclude("*"); json = serializer.serialize(jodder); assertAttribute("firstname", json); assertStringValue("Igor", json); assertAttribute("lastname", json); assertStringValue("Spasic", json); assertAttributeMissing("class", json); assertAttribute("phones", json); assertAttributeMissing("birthdate", json); }
@Test void testGenericTypeDeserialization() { JsonParser.Defaults.classMetadataName = "class"; JsonSerializer.Defaults.classMetadataName = "class"; JsonParsers.forEachParser(jsonParser -> { Pair<Hero, Villian> archenemies = new Pair<>(creator.createSuperman(), creator.createLexLuthor()); String json = new JsonSerializer() .exclude("*.class") .serialize(archenemies); Pair<Hero, Villian> deserialArchEnemies = jsonParser .map("first", Hero.class) .map("second", Villian.class) .parse(json, Pair.class); assertEquals(archenemies.getFirst().getClass(), deserialArchEnemies.getFirst().getClass()); assertEquals(archenemies.getSecond().getClass(), deserialArchEnemies.getSecond().getClass()); assertEquals(archenemies.getFirst().getIdentity(), deserialArchEnemies.getFirst().getIdentity()); assertEquals(archenemies.getFirst().getLair(), deserialArchEnemies.getFirst().getLair()); assertEquals(archenemies.getFirst().getName(), deserialArchEnemies.getFirst().getName()); assertEquals(archenemies.getSecond().getName(), deserialArchEnemies.getSecond().getName()); assertEquals(archenemies.getSecond().getLair(), deserialArchEnemies.getSecond().getLair()); }); }
@Test void testExclude() { String json = new JsonSerializer().serialize(jodder); assertAttribute("firstname", json); assertAttributeMissing("number", json); assertAttributeMissing("exchange", json); assertAttributeMissing("areaCode", json); json = new JsonSerializer().include("phones").serialize(jodder); assertAttribute("firstname", json); assertAttribute("number", json); assertAttribute("exchange", json); assertAttribute("areaCode", json); json = new JsonSerializer().include("phones").exclude("phones.areaCode").serialize(jodder); assertAttribute("firstname", json); assertAttribute("number", json); assertAttribute("exchange", json); assertAttributeMissing("areaCode", json); }
@Test void testArrayType() { JsonParsers.forEachParser(jsonParser -> { Person igor = creator.createJodder(); Person modesty = creator.createModesty(); Group group = new Group("brothers", igor, modesty); String json = new JsonSerializer().include("people").exclude("*.class").serialize(group); Group bro = jsonParser.map(Group.class).parse(json); assertNotNull(bro); assertEquals("brothers", bro.getGroupName()); assertEquals(2, bro.getPeople().length); assertEquals("Igor", bro.getPeople()[0].getFirstname()); assertEquals("Modesty", bro.getPeople()[1].getFirstname()); }); }
@Test void testNoClassHintsForCollections() { JsonParser.Defaults.classMetadataName = "class"; JsonSerializer.Defaults.classMetadataName = "class"; JsonParsers.forEachParser(jsonParser -> { Hero superman = creator.createSuperman(); String json = new JsonSerializer() .include("powers") // redudant .include("powers.class") .withSerializer("powers.class", new SimpleClassnameTransformer()) .exclude("*.class") .serialize(superman); int count = StringUtil.count(json, "***"); assertEquals(4, count); json = StringUtil.remove(json, "***"); Hero jsonSuperMan = jsonParser .map("lair", SecretLair.class) .map("secretIdentity", SecretIdentity.class) .parse(json, Hero.class); assertEquals("Fortress of Solitude", jsonSuperMan.getLair().getName()); assertHeroHasSuperPowers(jsonSuperMan); }); }
@Test void testNoClassHints() { JsonParsers.forEachParser(jsonParser -> { Hero superman = creator.createSuperman(); String json = new JsonSerializer().exclude("*.class").serialize(superman); Hero jsonSuperMan = jsonParser .map(Hero.class) .map("lair", SecretLair.class) .map("secretIdentity", SecretIdentity.class) .parse(json); assertNotNull(jsonSuperMan); assertEquals("Super Man", jsonSuperMan.getName()); assertNotNull(jsonSuperMan.getIdentity()); assertEquals("Clark Kent", jsonSuperMan.getIdentity().getName()); assertNotNull(jsonSuperMan.getLair()); assertEquals("Fortress of Solitude", jsonSuperMan.getLair().getName()); }); }