public JsonSerializer<?> modifyCollectionSerializer( SerializationConfig config, CollectionType valueType, BeanDescription beanDesc, JsonSerializer<?> serializer) { Class<?> klass = beanDesc.getBeanClass(); if (ClassUtil.isExtendedBy(klass, Set.class)) { return new SetSerializer(serializer); } else { return new ListSerializer(serializer); } }
protected void addObjectIdReader( DeserializationContext ctxt, BeanDescription beanDesc, BeanDeserializerBuilder builder) throws JsonMappingException { ObjectIdInfo objectIdInfo = beanDesc.getObjectIdInfo(); if (objectIdInfo == null) { return; } Class<?> implClass = objectIdInfo.getGeneratorType(); JavaType idType; SettableBeanProperty idProp; ObjectIdGenerator<?> gen; // Just one special case: Property-based generator is trickier if (implClass == ObjectIdGenerators.PropertyGenerator.class) { // most special one, needs extra work String propName = objectIdInfo.getPropertyName(); idProp = builder.findProperty(propName); if (idProp == null) { throw new IllegalArgumentException( "Invalid Object Id definition for " + beanDesc.getBeanClass().getName() + ": can not find property with name '" + propName + "'"); } idType = idProp.getType(); gen = new PropertyBasedObjectIdGenerator(objectIdInfo.getScope()); } else { JavaType type = ctxt.constructType(implClass); idType = ctxt.getTypeFactory().findTypeParameters(type, ObjectIdGenerator.class)[0]; idProp = null; gen = ctxt.objectIdGeneratorInstance(beanDesc.getClassInfo(), objectIdInfo); } // also: unlike with value deserializers, let's just resolve one we need here JsonDeserializer<?> deser = ctxt.findRootValueDeserializer(idType); builder.setObjectIdReader( ObjectIdReader.construct(idType, objectIdInfo.getPropertyName(), gen, deser, idProp)); }
@Override public JsonSerializer<?> modifySerializer( SerializationConfig config, BeanDescription beanDesc, JsonSerializer<?> serializer) { Class<?> klass = beanDesc.getBeanClass(); if (klass == Boolean.class) { return new BooleanSerializer(serializer); } else if (klass == Integer.class) { return new IntegerSerializer(serializer); } else if (klass == Long.class) { return new LongSerializer(serializer); } else if (klass == Float.class) { return new FloatSerializer(serializer); } else if (klass == Double.class) { return new DoubleSerializer(serializer); } else if (klass == BigDecimal.class) { return new BigDecimalSerializer(serializer); } else if (ClassUtil.isExtendedBy(klass, Date.class)) { return new DateSerializer(serializer); } return serializer; }