-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
b4dea3c
commit a475c0d
Showing
2 changed files
with
81 additions
and
56 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
74 changes: 74 additions & 0 deletions
74
src/main/java/com/fasterxml/jackson/databind/ser/std/ToStringSerializerBase.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
package com.fasterxml.jackson.databind.ser.std; | ||
|
||
import java.io.IOException; | ||
import java.lang.reflect.Type; | ||
|
||
import com.fasterxml.jackson.core.JsonGenerator; | ||
import com.fasterxml.jackson.core.JsonToken; | ||
import com.fasterxml.jackson.core.type.WritableTypeId; | ||
import com.fasterxml.jackson.databind.JavaType; | ||
import com.fasterxml.jackson.databind.JsonMappingException; | ||
import com.fasterxml.jackson.databind.JsonNode; | ||
import com.fasterxml.jackson.databind.SerializerProvider; | ||
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper; | ||
import com.fasterxml.jackson.databind.jsontype.TypeSerializer; | ||
|
||
/** | ||
* Intermediate base class that serves as base for standard {@link ToStringSerializer} | ||
* as well as for custom subtypes that want to add processing for converting from | ||
* value to output into its {@code String} representation (whereas standard version | ||
* simply calls value object's {@code toString()} method). | ||
* | ||
* @since 2.10 | ||
*/ | ||
@SuppressWarnings("serial") | ||
public abstract class ToStringSerializerBase | ||
extends StdSerializer<Object> | ||
{ | ||
public ToStringSerializerBase(Class<?> handledType) { | ||
super(handledType, false); | ||
} | ||
|
||
@Override | ||
public boolean isEmpty(SerializerProvider prov, Object value) { | ||
return valueToString(value).isEmpty(); | ||
} | ||
|
||
@Override | ||
public void serialize(Object value, JsonGenerator gen, SerializerProvider provider) | ||
throws IOException | ||
{ | ||
gen.writeString(valueToString(value)); | ||
} | ||
|
||
/** | ||
* Default implementation will write type prefix, call regular serialization | ||
* method (since assumption is that value itself does not need JSON | ||
* Array or Object start/end markers), and then write type suffix. | ||
* This should work for most cases; some sub-classes may want to | ||
* change this behavior. | ||
*/ | ||
@Override | ||
public void serializeWithType(Object value, JsonGenerator g, SerializerProvider provider, | ||
TypeSerializer typeSer) | ||
throws IOException | ||
{ | ||
WritableTypeId typeIdDef = typeSer.writeTypePrefix(g, | ||
typeSer.typeId(value, JsonToken.VALUE_STRING)); | ||
serialize(value, g, provider); | ||
typeSer.writeTypeSuffix(g, typeIdDef); | ||
} | ||
|
||
@Override | ||
public JsonNode getSchema(SerializerProvider provider, Type typeHint) throws JsonMappingException { | ||
return createSchemaNode("string", true); | ||
} | ||
|
||
@Override | ||
public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint) throws JsonMappingException | ||
{ | ||
visitStringFormat(visitor, typeHint); | ||
} | ||
|
||
public abstract String valueToString(Object value); | ||
} |