public class ObjectWriterProvider extends java.lang.Object implements ObjectCodecProvider
This provider supports various features including:
Example usage:
// Get default provider ObjectWriterProvider provider = JSONFactory.getDefaultObjectWriterProvider(); // Get object writer for a specific type ObjectWriter<User> writer = provider.getObjectWriter(User.class); // Serialize object to JSON string User user = new User(1, "John"); String jsonString = writer.toJSONString(user); // Register custom object writer provider.register(User.class, new CustomUserWriter());
| Modifier and Type | Field and Description |
|---|---|
(package private) boolean |
alphabetic |
(package private) java.util.concurrent.ConcurrentMap<java.lang.reflect.Type,ObjectWriter> |
cache |
(package private) java.util.concurrent.ConcurrentMap<java.lang.reflect.Type,ObjectWriter> |
cacheFieldBased |
(package private) ObjectWriterCreator |
creator |
(package private) boolean |
disableArrayMapping |
(package private) boolean |
disableAutoType |
(package private) boolean |
disableJSONB |
(package private) boolean |
disableReferenceDetect |
(package private) static int |
ENUM |
(package private) java.util.concurrent.ConcurrentMap<java.lang.Class,java.lang.Class> |
mixInCache |
(package private) java.util.List<ObjectWriterModule> |
modules |
(package private) static int |
NAME_COMPATIBLE_WITH_FILED |
(package private) PropertyNamingStrategy |
namingStrategy |
(package private) static int[] |
NOT_REFERENCES_TYPE_HASH_CODES |
(package private) static int[] |
PRIMITIVE_HASH_CODES |
(package private) boolean |
skipTransient |
(package private) static int |
TYPE_DATE_MASK |
(package private) static int |
TYPE_DECIMAL_MASK |
(package private) static int |
TYPE_ENUM_MASK |
(package private) static int |
TYPE_INT32_MASK |
(package private) static int |
TYPE_INT64_MASK |
(package private) long |
userDefineMask |
| Constructor and Description |
|---|
ObjectWriterProvider()
Constructs an ObjectWriterProvider with default settings.
|
ObjectWriterProvider(ObjectWriterCreator creator)
Constructs an ObjectWriterProvider with the specified ObjectWriterCreator.
|
ObjectWriterProvider(PropertyNamingStrategy namingStrategy)
Constructs an ObjectWriterProvider with the specified naming strategy.
|
| Modifier and Type | Method and Description |
|---|---|
void |
cleanup(java.lang.Class objectClass)
Cleans up cached ObjectWriters and mixin mappings associated with the specified class.
|
void |
cleanup(java.lang.ClassLoader classLoader)
Cleans up cached ObjectWriters associated with the specified ClassLoader.
|
void |
cleanupMixIn()
Clears all mixin mappings.
|
void |
clear()
Clears all cached ObjectWriters and mixin mappings.
|
void |
configEnumAsJavaBean(java.lang.Class<? extends java.lang.Enum>... enumClasses)
Configure the Enum classes as a JavaBean
|
protected BeanInfo |
createBeanInfo()
Creates a new BeanInfo instance.
|
void |
getBeanInfo(BeanInfo beanInfo,
java.lang.Class objectClass)
Gets bean information for the specified class by delegating to registered modules.
|
ObjectWriterCreator |
getCreator()
Gets the ObjectWriterCreator used by this provider.
|
void |
getFieldInfo(BeanInfo beanInfo,
FieldInfo fieldInfo,
java.lang.Class objectClass,
java.lang.reflect.Field field)
Gets field information for the specified field of a class.
|
void |
getFieldInfo(BeanInfo beanInfo,
FieldInfo fieldInfo,
java.lang.Class objectClass,
java.lang.reflect.Method method)
Gets field information for the specified method of a class.
|
java.lang.Class |
getMixIn(java.lang.Class target)
Gets the mixin source class for the specified target class.
|
java.util.List<ObjectWriterModule> |
getModules()
Gets the list of registered ObjectWriter modules.
|
PropertyNamingStrategy |
getNamingStrategy()
Gets the property naming strategy used by this provider.
|
ObjectWriter |
getObjectWriter(java.lang.Class objectClass)
Gets an ObjectWriter for the specified class.
|
ObjectWriter |
getObjectWriter(java.lang.reflect.Type objectType)
Gets an ObjectWriter for the specified type.
|
ObjectWriter |
getObjectWriter(java.lang.reflect.Type objectType,
java.lang.Class objectClass)
Gets an ObjectWriter for the specified type and class.
|
ObjectWriter |
getObjectWriter(java.lang.reflect.Type objectType,
java.lang.Class objectClass,
boolean fieldBased)
Gets an ObjectWriter for the specified type, class, and field-based option.
|
ObjectWriter |
getObjectWriter(java.lang.reflect.Type objectType,
java.lang.Class objectClass,
java.lang.String format,
boolean fieldBased)
Gets an ObjectWriter for the specified type, class, and format with field-based option.
|
ObjectWriter |
getObjectWriter(java.lang.reflect.Type objectType,
java.lang.String format,
java.util.Locale locale)
Gets an ObjectWriter for the specified type with formatting.
|
ObjectWriter |
getObjectWriterFromCache(java.lang.reflect.Type objectType,
java.lang.Class objectClass,
boolean fieldBased)
Gets an ObjectWriter from the cache for the specified type and class.
|
private ObjectWriter |
getObjectWriterInternal(java.lang.reflect.Type objectType,
java.lang.Class objectClass,
boolean fieldBased) |
void |
init()
Initializes this provider with the base module.
|
boolean |
isAlphabetic()
Checks if alphabetic ordering is enabled.
|
boolean |
isDisableArrayMapping()
Checks if array mapping is disabled.
|
boolean |
isDisableAutoType()
Checks if auto-type support is disabled.
|
boolean |
isDisableJSONB()
Checks if JSONB support is disabled.
|
boolean |
isDisableReferenceDetect()
Checks if reference detection is disabled.
|
static boolean |
isNotReferenceDetect(java.lang.Class<?> clazz)
Checks if the specified class is a type that should not have reference detection.
|
static boolean |
isPrimitiveOrEnum(java.lang.Class<?> clazz)
Checks if the specified class is a primitive type or an enum.
|
boolean |
isSkipTransient()
Checks if transient fields should be skipped.
|
(package private) static boolean |
match(java.lang.reflect.Type objectType,
ObjectWriter objectWriter,
java.lang.ClassLoader classLoader,
java.util.IdentityHashMap<ObjectWriter,java.lang.Object> checkedMap) |
void |
mixIn(java.lang.Class target,
java.lang.Class mixinSource)
Registers a mixin mapping between a target class and a mixin source class.
|
boolean |
register(ObjectWriterModule module)
Registers an ObjectWriterModule.
|
ObjectWriter |
register(java.lang.reflect.Type type,
ObjectWriter objectWriter)
Registers an ObjectWriter for the specified type using the default field-based setting.
|
ObjectWriter |
register(java.lang.reflect.Type type,
ObjectWriter objectWriter,
boolean fieldBased)
Registers an ObjectWriter for the specified type.
|
ObjectWriter |
registerIfAbsent(java.lang.reflect.Type type,
ObjectWriter objectWriter)
Registers an ObjectWriter for the specified type using method-based writing
if it is not already registered.
|
ObjectWriter |
registerIfAbsent(java.lang.reflect.Type type,
ObjectWriter objectWriter,
boolean fieldBased)
Registers an ObjectWriter for the specified type if it is not already registered.
|
void |
setAlphabetic(boolean alphabetic)
Sets whether alphabetic ordering is enabled.
|
void |
setCompatibleWithFieldName(boolean stat)
Deprecated.
only use compatible with fastjson 1.x
|
void |
setDisableArrayMapping(boolean disableArrayMapping)
Sets whether array mapping is disabled.
|
void |
setDisableAutoType(boolean disableAutoType)
Sets whether auto-type support is disabled.
|
void |
setDisableJSONB(boolean disableJSONB)
Sets whether JSONB support is disabled.
|
void |
setDisableReferenceDetect(boolean disableReferenceDetect)
Sets whether reference detection is disabled.
|
void |
setNamingStrategy(PropertyNamingStrategy namingStrategy)
Sets the property naming strategy used by this provider.
|
void |
setSkipTransient(boolean skipTransient)
Sets whether transient fields should be skipped.
|
boolean |
unregister(ObjectWriterModule module)
Unregisters an ObjectWriterModule.
|
ObjectWriter |
unregister(java.lang.reflect.Type type)
Unregisters the ObjectWriter for the specified type using method-based writing.
|
ObjectWriter |
unregister(java.lang.reflect.Type type,
boolean fieldBased)
Unregisters the ObjectWriter for the specified type.
|
boolean |
unregister(java.lang.reflect.Type type,
ObjectWriter objectWriter)
Unregisters the specified ObjectWriter for the given type, but only if the currently
registered writer matches the specified writer.
|
boolean |
unregister(java.lang.reflect.Type type,
ObjectWriter objectWriter,
boolean fieldBased)
Unregisters the specified ObjectWriter for the given type, but only if the currently
registered writer matches the specified writer.
|
static final int TYPE_INT32_MASK
static final int TYPE_INT64_MASK
static final int TYPE_DECIMAL_MASK
static final int TYPE_DATE_MASK
static final int TYPE_ENUM_MASK
static final int NAME_COMPATIBLE_WITH_FILED
final java.util.concurrent.ConcurrentMap<java.lang.reflect.Type,ObjectWriter> cache
final java.util.concurrent.ConcurrentMap<java.lang.reflect.Type,ObjectWriter> cacheFieldBased
final java.util.concurrent.ConcurrentMap<java.lang.Class,java.lang.Class> mixInCache
final ObjectWriterCreator creator
final java.util.List<ObjectWriterModule> modules
PropertyNamingStrategy namingStrategy
boolean disableReferenceDetect
boolean disableArrayMapping
boolean disableJSONB
boolean disableAutoType
boolean skipTransient
volatile long userDefineMask
boolean alphabetic
static final int ENUM
static final int[] PRIMITIVE_HASH_CODES
static final int[] NOT_REFERENCES_TYPE_HASH_CODES
public ObjectWriterProvider()
public ObjectWriterProvider(PropertyNamingStrategy namingStrategy)
namingStrategy - the property naming strategy to usepublic ObjectWriterProvider(ObjectWriterCreator creator)
creator - the ObjectWriterCreator to use for creating ObjectWriter instancespublic PropertyNamingStrategy getNamingStrategy()
public void setCompatibleWithFieldName(boolean stat)
stat - true to enable compatible field name behavior, false to disablepublic void setNamingStrategy(PropertyNamingStrategy namingStrategy)
namingStrategy - the property naming strategy to setpublic void mixIn(java.lang.Class target,
java.lang.Class mixinSource)
target - the target class to which the mixin will be appliedmixinSource - the source class from which annotations will be copied, or null to remove the mixinpublic void cleanupMixIn()
public ObjectWriterCreator getCreator()
public ObjectWriter register(java.lang.reflect.Type type, ObjectWriter objectWriter)
type - the type for which to register the ObjectWriterobjectWriter - the ObjectWriter to register, or null to unregisterpublic ObjectWriter register(java.lang.reflect.Type type, ObjectWriter objectWriter, boolean fieldBased)
type - the type for which to register the ObjectWriterobjectWriter - the ObjectWriter to register, or null to unregisterfieldBased - whether the ObjectWriter is field-basedpublic ObjectWriter registerIfAbsent(java.lang.reflect.Type type, ObjectWriter objectWriter)
type - the type for which to register the ObjectWriterobjectWriter - the ObjectWriter to registerpublic ObjectWriter registerIfAbsent(java.lang.reflect.Type type, ObjectWriter objectWriter, boolean fieldBased)
type - the type for which to register the ObjectWriterobjectWriter - the ObjectWriter to registerfieldBased - whether the ObjectWriter is field-basedpublic ObjectWriter unregister(java.lang.reflect.Type type)
type - the type for which to unregister the ObjectWriterpublic ObjectWriter unregister(java.lang.reflect.Type type, boolean fieldBased)
type - the type for which to unregister the ObjectWriterfieldBased - whether the ObjectWriter is field-basedpublic boolean unregister(java.lang.reflect.Type type,
ObjectWriter objectWriter)
type - the type for which to unregister the ObjectWriterobjectWriter - the ObjectWriter to unregisterpublic boolean unregister(java.lang.reflect.Type type,
ObjectWriter objectWriter,
boolean fieldBased)
type - the type for which to unregister the ObjectWriterobjectWriter - the ObjectWriter to unregisterfieldBased - whether the ObjectWriter is field-basedpublic boolean register(ObjectWriterModule module)
module - the module to registerpublic boolean unregister(ObjectWriterModule module)
module - the module to unregisterpublic java.lang.Class getMixIn(java.lang.Class target)
getMixIn in interface ObjectCodecProvidertarget - the target classpublic void init()
public java.util.List<ObjectWriterModule> getModules()
public void getFieldInfo(BeanInfo beanInfo, FieldInfo fieldInfo, java.lang.Class objectClass, java.lang.reflect.Field field)
beanInfo - the BeanInfo object to populate with bean informationfieldInfo - the FieldInfo object to populate with field informationobjectClass - the class containing the fieldfield - the field for which to get informationpublic void getFieldInfo(BeanInfo beanInfo, FieldInfo fieldInfo, java.lang.Class objectClass, java.lang.reflect.Method method)
beanInfo - the BeanInfo object to populate with bean informationfieldInfo - the FieldInfo object to populate with field informationobjectClass - the class containing the methodmethod - the method for which to get informationpublic void getBeanInfo(BeanInfo beanInfo, java.lang.Class objectClass)
beanInfo - the BeanInfo object to populate with bean informationobjectClass - the class for which to get bean informationpublic ObjectWriter getObjectWriter(java.lang.reflect.Type objectType, java.lang.String format, java.util.Locale locale)
objectType - the type for which to get an ObjectWriterformat - the format string to uselocale - the locale to usepublic ObjectWriter getObjectWriter(java.lang.Class objectClass)
objectClass - the class for which to get an ObjectWriterpublic ObjectWriter getObjectWriter(java.lang.reflect.Type objectType, java.lang.Class objectClass)
objectType - the type for which to get an ObjectWriterobjectClass - the class for which to get an ObjectWriterpublic ObjectWriter getObjectWriter(java.lang.reflect.Type objectType)
objectType - the type for which to get an ObjectWriterpublic ObjectWriter getObjectWriterFromCache(java.lang.reflect.Type objectType, java.lang.Class objectClass, boolean fieldBased)
objectType - the type for which to get an ObjectWriterobjectClass - the class for which to get an ObjectWriterfieldBased - whether to use field-based writingpublic ObjectWriter getObjectWriter(java.lang.reflect.Type objectType, java.lang.Class objectClass, java.lang.String format, boolean fieldBased)
objectType - the type for which to get an ObjectWriterobjectClass - the class for which to get an ObjectWriterformat - the format string to usefieldBased - whether to use field-based writingpublic ObjectWriter getObjectWriter(java.lang.reflect.Type objectType, java.lang.Class objectClass, boolean fieldBased)
objectType - the type for which to get an ObjectWriterobjectClass - the class for which to get an ObjectWriterfieldBased - whether to use field-based writingprivate ObjectWriter getObjectWriterInternal(java.lang.reflect.Type objectType, java.lang.Class objectClass, boolean fieldBased)
public static boolean isPrimitiveOrEnum(java.lang.Class<?> clazz)
clazz - the class to checkpublic static boolean isNotReferenceDetect(java.lang.Class<?> clazz)
clazz - the class to checkpublic void clear()
public void cleanup(java.lang.Class objectClass)
objectClass - the class for which to clean up cached ObjectWritersstatic boolean match(java.lang.reflect.Type objectType,
ObjectWriter objectWriter,
java.lang.ClassLoader classLoader,
java.util.IdentityHashMap<ObjectWriter,java.lang.Object> checkedMap)
public void cleanup(java.lang.ClassLoader classLoader)
classLoader - the ClassLoader for which to clean up cached ObjectWriterspublic boolean isDisableReferenceDetect()
public boolean isDisableAutoType()
public boolean isDisableJSONB()
public boolean isDisableArrayMapping()
public void setDisableReferenceDetect(boolean disableReferenceDetect)
disableReferenceDetect - true to disable reference detection, false to enable itpublic void setDisableArrayMapping(boolean disableArrayMapping)
disableArrayMapping - true to disable array mapping, false to enable itpublic void setDisableJSONB(boolean disableJSONB)
disableJSONB - true to disable JSONB support, false to enable itpublic void setDisableAutoType(boolean disableAutoType)
disableAutoType - true to disable auto-type support, false to enable itpublic boolean isAlphabetic()
public void setAlphabetic(boolean alphabetic)
alphabetic - true to enable alphabetic ordering, false to disable itpublic boolean isSkipTransient()
public void setSkipTransient(boolean skipTransient)
skipTransient - true to skip transient fields, false to include themprotected BeanInfo createBeanInfo()
@SafeVarargs public final void configEnumAsJavaBean(java.lang.Class<? extends java.lang.Enum>... enumClasses)
enumClasses - enum classes