1 package com.fasterxml.jackson.databind.ser.impl; 2 3 import com.fasterxml.jackson.annotation.ObjectIdGenerator; 4 import com.fasterxml.jackson.core.SerializableString; 5 import com.fasterxml.jackson.core.io.SerializedString; 6 import com.fasterxml.jackson.databind.*; 7 8 /** 9 * Object that knows how to serialize Object Ids. 10 */ 11 public final class ObjectIdWriter 12 { 13 public final JavaType idType; 14 15 /** 16 * Name of id property to write, if not null: if null, should 17 * only write references, but id property is handled by some 18 * other entity. 19 */ 20 public final SerializableString propertyName; 21 22 /** 23 * Blueprint generator instance: actual instance will be 24 * fetched from {@link SerializerProvider} using this as 25 * the key. 26 */ 27 public final ObjectIdGenerator<?> generator; 28 29 /** 30 * Serializer used for serializing id values. 31 */ 32 public final JsonSerializer<Object> serializer; 33 34 /** 35 * Marker that indicates what the first reference is to be 36 * serialized as full POJO, or as Object Id (other references 37 * will always be serialized as Object Id) 38 * 39 * @since 2.1 40 */ 41 public final boolean alwaysAsId; 42 43 /* 44 /********************************************************** 45 /* Life-cycle 46 /********************************************************** 47 */ 48 49 @SuppressWarnings("unchecked") ObjectIdWriter(JavaType t, SerializableString propName, ObjectIdGenerator<?> gen, JsonSerializer<?> ser, boolean alwaysAsId)50 protected ObjectIdWriter(JavaType t, SerializableString propName, 51 ObjectIdGenerator<?> gen, JsonSerializer<?> ser, boolean alwaysAsId) 52 { 53 idType = t; 54 propertyName = propName; 55 generator = gen; 56 serializer = (JsonSerializer<Object>) ser; 57 this.alwaysAsId = alwaysAsId; 58 } 59 60 /** 61 * Factory method called by {@link com.fasterxml.jackson.databind.ser.std.BeanSerializerBase} 62 * with the initial information based on standard settings for the type 63 * for which serializer is being built. 64 * 65 * @since 2.3 66 */ construct(JavaType idType, PropertyName propName, ObjectIdGenerator<?> generator, boolean alwaysAsId)67 public static ObjectIdWriter construct(JavaType idType, PropertyName propName, 68 ObjectIdGenerator<?> generator, boolean alwaysAsId) 69 { 70 String simpleName = (propName == null) ? null : propName.getSimpleName(); 71 SerializableString serName = (simpleName == null) ? null : new SerializedString(simpleName); 72 return new ObjectIdWriter(idType, serName, generator, null, alwaysAsId); 73 } 74 withSerializer(JsonSerializer<?> ser)75 public ObjectIdWriter withSerializer(JsonSerializer<?> ser) { 76 return new ObjectIdWriter(idType, propertyName, generator, ser, alwaysAsId); 77 } 78 79 /** 80 * @since 2.1 81 */ withAlwaysAsId(boolean newState)82 public ObjectIdWriter withAlwaysAsId(boolean newState) { 83 if (newState == alwaysAsId) { 84 return this; 85 } 86 return new ObjectIdWriter(idType, propertyName, generator, serializer, newState); 87 } 88 } 89