@Override protected void serializeFields(Object bean, final JsonGenerator gen, SerializerProvider provider) throws IOException { if (bean instanceof ExtendedJsonWrapper) { ExtendedJsonWrapper mixin = (ExtendedJsonWrapper) bean; Object origin = mixin.getOrigin(); BeanSerializer serializer = (BeanSerializer) provider.findValueSerializer(origin.getClass()); new ExtendedJsonSerializer(serializer).serializeFieldsFiltered(origin, gen, provider); Set<Entry<String, Object>> entries = mixin.getMixed().entrySet(); //gen.writeObjectField("mixedIn", mixin.getMixed()); for (Entry<String, Object> entry : entries) { if(entry.getValue() != null){ try { gen.writeObjectField(entry.getKey(), entry.getValue()); } catch (IOException e) { throw new RuntimeException(e); } } } } else { super.serializeFields(bean, gen, provider); } }
private JsonSerializer<Object> findSerializer(Class<?> type, SerializerProvider provider, boolean eventBean) throws JsonMappingException { JsonSerializer<Object> serializer = serializers.serializerFor(type); if (serializer != null) return serializer; serializer = provider.findValueSerializer(type, null); if (eventBean) serializer = new EventBeanSerializer((BeanSerializer)serializer); serializers = serializers.newWith(type, serializer); return serializer; }
@Override public JsonSerializer<?> modifySerializer(SerializationConfig config, BeanDescription beanDesc, JsonSerializer<?> serializer) { if (serializer instanceof BeanSerializer) { return new BeanSerializerWrapper((BeanSerializer) serializer); } else { return serializer; } }
EventBeanSerializer(BeanSerializer src) { super(src); }
protected BeanSerializerWrapper(BeanSerializer src) { super(src); this.serializer = src; }
public ExtensibleObjectSerializer(BeanSerializer src) { super(src); }
@Override public JsonSerializer<?> modifySerializer(SerializationConfig config, BeanDescription beanDesc, JsonSerializer<?> serializer) { return (serializer instanceof BeanSerializer) ? new ExtensibleObjectSerializer((BeanSerializer) serializer) : serializer; }
/** * Constructs and initializes a JsonService with an {@link ObjectService}. * * @param objectService */ public DefaultJsonService(final ObjectService objectService) { idToObjDeserializer = new UntypedObjectDeserializer(null, null) { @Override public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { final Object obj = super.deserialize(p, ctxt); if (!(obj instanceof String && ((String) obj).startsWith("object:"))) return obj; final String id = (String) obj; if (!objectService.contains(id)) { throw new JsonMappingException(p, "Object does not exist"); } final ObjectInfo info = objectService.find(id); info.updateLastUsed(); return info.getObject(); } }; final JsonSerializer<Object> objToIdSerializer = new JsonSerializer<Object>() { @Override public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException { gen.writeString(objectService.register(value, "DefaultJsonService")); } }; final SimpleModule objToIdModule = new SimpleModule(); objToIdModule.setSerializerModifier(new BeanSerializerModifier() { @Override public JsonSerializer<?> modifySerializer(SerializationConfig config, BeanDescription beanDesc, JsonSerializer<?> serializer) { if (Mixins.support(beanDesc.getBeanClass())) return serializer; // If the serialized class is unknown (i.e. serialized using the general // BeanSerializer) or should not be serialized (i.e. complicated class // implemented interfaces such as Iterable), would be serialized as an // ID. if (serializer instanceof BeanSerializer) return objToIdSerializer; if (notSerialized(beanDesc.getBeanClass())) return objToIdSerializer; return serializer; } }); objToIdMapper = new ObjectMapper(); objToIdMapper.registerModule(objToIdModule); // register Jackson MixIns to obtain better json output format for some // specific types Mixins.registerMixIns(objToIdMapper); }