下面列出了com.fasterxml.jackson.databind.jsontype.TypeSerializer#writeTypeSuffix ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void serializeWithType(
CharIterable value,
JsonGenerator g,
SerializerProvider ctxt,
TypeSerializer typeSer
) throws IOException {
g.setCurrentValue(value);
WritableTypeId typeIdDef;
if (ctxt.isEnabled(SerializationFeature.WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS)) {
typeIdDef = typeSer.writeTypePrefix(g, ctxt, typeSer.typeId(value, JsonToken.START_ARRAY));
writeContentsAsArray(value, g);
} else {
typeIdDef = typeSer.writeTypePrefix(g, ctxt, typeSer.typeId(value, JsonToken.VALUE_STRING));
char[] chars = value.toArray();
g.writeString(chars, 0, chars.length);
}
typeSer.writeTypeSuffix(g, ctxt, typeIdDef);
}
@Override
public void serializeWithType(Object bean, JsonGenerator gen,
SerializerProvider provider, TypeSerializer typeSer)
throws IOException
{
/* 10-Dec-2014, tatu: Not sure if this can be made to work reliably;
* but for sure delegating to default implementation will not work. So:
*/
if (_objectIdWriter != null) {
_serializeWithObjectId(bean, gen, provider, typeSer);
return;
}
gen.setCurrentValue(bean);
WritableTypeId typeIdDef = _typeIdDef(typeSer, bean, JsonToken.START_ARRAY);
typeSer.writeTypePrefix(gen, typeIdDef);
serializeAsArray(bean, gen, provider);
typeSer.writeTypeSuffix(gen, typeIdDef);
}
protected void _serializeObjectId(Object bean, JsonGenerator g,
SerializerProvider provider,
TypeSerializer typeSer, WritableObjectId objectId) throws IOException
{
final ObjectIdWriter w = _objectIdWriter;
WritableTypeId typeIdDef = _typeIdDef(typeSer, bean, JsonToken.START_OBJECT);
typeSer.writeTypePrefix(g, typeIdDef);
objectId.writeAsField(g, provider, w);
if (_propertyFilterId != null) {
serializeFieldsFiltered(bean, g, provider);
} else {
serializeFields(bean, g, provider);
}
typeSer.writeTypeSuffix(g, typeIdDef);
}
@Override
public void serializeWithType(LocalDate value, JsonGenerator g,
SerializerProvider ctxt, TypeSerializer typeSer) throws IOException
{
WritableTypeId typeIdDef = typeSer.writeTypePrefix(g, ctxt,
typeSer.typeId(value, serializationShape(ctxt)));
// need to write out to avoid double-writing array markers
switch (typeIdDef.valueShape) {
case START_ARRAY:
_serializeAsArrayContents(value, g, ctxt);
break;
case VALUE_NUMBER_INT:
g.writeNumber(value.toEpochDay());
break;
default:
g.writeString((_formatter == null) ? value.toString() : value.format(_formatter));
}
typeSer.writeTypeSuffix(g, ctxt, typeIdDef);
}
@Override
public void serializeWithType(Multimap<?,?> value, JsonGenerator gen,
SerializerProvider ctxt, TypeSerializer typeSer)
throws IOException
{
gen.setCurrentValue(value);
WritableTypeId typeIdDef = typeSer.writeTypePrefix(gen, ctxt,
typeSer.typeId(value, JsonToken.START_OBJECT));
if (!value.isEmpty()) {
// 20-Mar-2017, tatu: And this is where [datatypes-collections#7] would be
// plugged in...
// if (_sortKeys || provider.isEnabled(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS)) {
// value = _orderEntries(value, gen, provider);
// }
if (_filterId != null) {
serializeFilteredFields(value, gen, ctxt);
} else {
serializeFields(value, gen, ctxt);
}
}
typeSer.writeTypeSuffix(gen, ctxt, typeIdDef);
}
@Override
public void serializeWithType(Node value, JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
WritableTypeId typeId = typeSer.typeId(value, Node.class, JsonToken.START_OBJECT);
typeSer.writeTypePrefix(gen, typeId);
serialize(value, gen, serializers);
typeSer.writeTypeSuffix(gen, typeId);
}
@Override
public void serializeWithType(C value, JsonGenerator g, SerializerProvider ctxt, TypeSerializer typeSer)
throws IOException {
g.setCurrentValue(value);
WritableTypeId typeIdDef = typeSer.writeTypePrefix(g, ctxt, typeSer.typeId(value, JsonToken.START_ARRAY));
serializeContents(value, g);
typeSer.writeTypeSuffix(g, ctxt, typeIdDef);
}
/**
* Implementing typed output for contents of a TokenBuffer is very tricky,
* since we do not know for sure what its contents might look like (or, rather,
* we do know when serializing, but not necessarily when deserializing!)
* One possibility would be to check the current token, and use that to
* determine if we would output JSON Array, Object or scalar value.
*<p>
* Note that we just claim it is scalar; this should work ok and is simpler
* than doing introspection on both serialization and deserialization.
*/
@Override
public final void serializeWithType(TokenBuffer value, JsonGenerator g,
SerializerProvider provider, TypeSerializer typeSer) throws IOException
{
// 28-Jun-2017, tatu: As per javadoc, not sure what to report as likely shape. Could
// even look into first actual token inside... but, for now let's keep it simple
WritableTypeId typeIdDef = typeSer.writeTypePrefix(g,
typeSer.typeId(value, JsonToken.VALUE_EMBEDDED_OBJECT));
serialize(value, g, provider);
typeSer.writeTypeSuffix(g, typeIdDef);
}
@Override
public void serializeWithType(CharContainer value, JsonGenerator gen, SerializerProvider ctxt,
TypeSerializer typeSer)
throws IOException
{
gen.setCurrentValue(value);
WritableTypeId typeIdDef = typeSer.writeTypePrefix(gen, ctxt,
typeSer.typeId(value, JsonToken.VALUE_STRING));
serializeContents(value, gen, ctxt);
typeSer.writeTypeSuffix(gen, ctxt, typeIdDef);
}
@Override
public void serializeWithType(
ByteIterable value, JsonGenerator g, SerializerProvider ctxt,
TypeSerializer typeSer
)
throws IOException {
WritableTypeId typeIdDef = typeSer.writeTypePrefix(g, ctxt,
typeSer.typeId(value, JsonToken.VALUE_EMBEDDED_OBJECT));
byte[] arr = value.toArray();
g.writeBinary(ctxt.getConfig().getBase64Variant(), arr, 0, arr.length);
typeSer.writeTypeSuffix(g, ctxt, typeIdDef);
}
@Override
public void serializeWithType(Path value, JsonGenerator g,
SerializerProvider provider, TypeSerializer typeSer) throws IOException
{
// Better ensure we don't use specific sub-classes:
WritableTypeId typeIdDef = typeSer.writeTypePrefix(g,
typeSer.typeId(value, Path.class, JsonToken.VALUE_STRING));
serialize(value, g, provider);
typeSer.writeTypeSuffix(g, typeIdDef);
}
@Override
public void serializeWithType(
T value, JsonGenerator gen,
SerializerProvider ctxt, TypeSerializer typeSer
) throws IOException {
gen.setCurrentValue(value);
WritableTypeId typeIdDef = typeSer.writeTypePrefix(gen, ctxt,
typeSer.typeId(value, JsonToken.START_OBJECT));
if (!isEmpty(ctxt, value)) {
serializeFields(value, gen, ctxt);
}
typeSer.writeTypeSuffix(gen, ctxt, typeIdDef);
}
@Override
public void serializeWithType(InetSocketAddress value, JsonGenerator g,
SerializerProvider provider, TypeSerializer typeSer) throws IOException
{
// Better ensure we don't use specific sub-classes...
WritableTypeId typeIdDef = typeSer.writeTypePrefix(g,
typeSer.typeId(value, InetSocketAddress.class, JsonToken.VALUE_STRING));
serialize(value, g, provider);
typeSer.writeTypeSuffix(g, typeIdDef);
}
@Override
public void serializeWithType(final Table<?, ?, ?> value,
final JsonGenerator gen, final SerializerProvider ctxt,
final TypeSerializer typeSer) throws IOException
{
gen.setCurrentValue(value);
WritableTypeId typeIdDef = typeSer.writeTypePrefix(gen, ctxt,
typeSer.typeId(value, JsonToken.START_OBJECT));
serializeFields(value, gen, ctxt);
typeSer.writeTypeSuffix(gen, ctxt, typeIdDef);
}
@Override
public void serializeWithType(ByteContainer value, JsonGenerator gen, SerializerProvider ctxt,
TypeSerializer typeSer)
throws IOException
{
gen.setCurrentValue(value);
WritableTypeId typeIdDef = typeSer.writeTypePrefix(gen, ctxt,
typeSer.typeId(value, JsonToken.VALUE_EMBEDDED_OBJECT));
serializeContents(value, gen, ctxt);
typeSer.writeTypeSuffix(gen, ctxt, typeIdDef);
}
@Override
public void serializeWithType(JsonGenerator g, SerializerProvider provider,
TypeSerializer typeSer)
throws IOException
{
WritableTypeId typeIdDef = new WritableTypeId(this, JsonToken.VALUE_STRING);
typeSer.writeTypePrefix(g, typeIdDef);
this.serialize(g, provider);
typeSer.writeTypeSuffix(g, typeIdDef);
}
@Override
public void serializeWithType(T value, JsonGenerator g, SerializerProvider provider,
TypeSerializer typeSer)
throws IOException
{
WritableTypeId typeIdDef = typeSer.writeTypePrefix(g,
typeSer.typeId(value, JsonToken.VALUE_EMBEDDED_OBJECT));
serialize(value, g, provider);
typeSer.writeTypeSuffix(g, typeIdDef);
}
@Override
public void serializeWithType(Map.Entry<?, ?> value, JsonGenerator g,
SerializerProvider provider, TypeSerializer typeSer) throws IOException
{
// [databind#631]: Assign current value, to be accessible by custom serializers
g.setCurrentValue(value);
WritableTypeId typeIdDef = typeSer.writeTypePrefix(g,
typeSer.typeId(value, JsonToken.START_OBJECT));
serializeDynamic(value, g, provider);
typeSer.writeTypeSuffix(g, typeIdDef);
}
@Override
public void serializeWithType(List<String> value, JsonGenerator g, SerializerProvider provider,
TypeSerializer typeSer)
throws IOException
{
WritableTypeId typeIdDef = typeSer.writeTypePrefix(g,
typeSer.typeId(value, JsonToken.START_ARRAY));
serializeContents(value, g, provider, value.size());
typeSer.writeTypeSuffix(g, typeIdDef);
}
@Override
public void serializeWithType(T value, JsonGenerator g, SerializerProvider ctxt,
TypeSerializer typeSer) throws IOException
{
WritableTypeId typeIdDef = typeSer.writeTypePrefix(g, ctxt,
typeSer.typeId(value, serializationShape(ctxt)));
serialize(value, g, ctxt);
typeSer.writeTypeSuffix(g, ctxt, typeIdDef);
}