## com.fasterxml.jackson.databind.ser.std
Class JsonValueSerializer

    java.lang.Object
      com.fasterxml.jackson.databind.JsonSerializer<T>
          com.fasterxml.jackson.databind.ser.std.StdSerializer<Object>
              com.fasterxml.jackson.databind.ser.std.JsonValueSerializer

All Implemented Interfaces:
  SchemaAware, ContextualSerializer

    public class JsonValueSerializer

extends StdSerializer<Object>
implements ContextualSerializer, SchemaAware

Serializer class that can serialize Object that have a `JsonValue` annotation to indicate that serialization should be done by calling the method annotated, and serializing result it returns.

Implementation note: we will post-process resulting serializer (much like what is done with `BeanSerializer`) to figure out actual serializers for final types. This must be done from `createContextual(com.fasterxml.jackson.databind.SerializerProvider, com.fasterxml.jackson.databind.BeanProperty)` method, and NOT from constructor; otherwise we could end up with an infinite loop.

Nested Class Summary

Nested classes/interfaces inherited from class com.fasterxml.jackson.databind.JsonSerializer
`JsonSerializer.None`

Field Summary
`protected Method` `_accessorMethod`
`protected boolean` `_forceTypeInformation` This is a flag that is set in rare (?) cases where this serializer is used for "natural" types (boolean, int, String, double); and where we actually must force type information wrapping, even though one would not normally be added.
`protected BeanProperty` `_property`
`protected JsonSerializer<Object>` `_valueSerializer`

Fields inherited from class com.fasterxml.jackson.databind.ser.std.StdSerializer
`_handledType`

Constructor Summary
`JsonValueSerializer(JsonValueSerializer src, BeanProperty property, JsonSerializer<?> ser, boolean forceTypeInfo)`
`JsonValueSerializer(Method valueMethod, JsonSerializer<Object> ser)`

Method Summary
`JsonSerializer<?>` `createContextual(SerializerProvider provider, BeanProperty property)` We can try to find the actual serializer for value, if we can statically figure out what the result type must be.
`JsonNode` `getSchema(SerializerProvider provider, Type typeHint)` Default implementation simply claims type is "string"; usually overriden by custom serializers.
`protected boolean` `isNaturalTypeWithStdHandling(Class<?> rawType, JsonSerializer<?> ser)`
`void` `serialize(Object bean, com.fasterxml.jackson.core.JsonGenerator jgen, SerializerProvider prov)` Method that can be called to ask implementation to serialize values of type this serializer handles.
`void` `serializeWithType(Object bean, com.fasterxml.jackson.core.JsonGenerator jgen, SerializerProvider provider, TypeSerializer typeSer)` Method that can be called to ask implementation to serialize values of type this serializer handles, using specified type serializer for embedding necessary type information.
`String` `toString()`
`JsonValueSerializer` `withResolved(BeanProperty property, JsonSerializer<?> ser, boolean forceTypeInfo)`

Methods inherited from class com.fasterxml.jackson.databind.ser.std.StdSerializer
`createObjectNode, createSchemaNode, createSchemaNode, handledType, isDefaultSerializer, wrapAndThrow, wrapAndThrow`

Methods inherited from class com.fasterxml.jackson.databind.JsonSerializer
`isEmpty, isUnwrappingSerializer, unwrappingSerializer, usesObjectId`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Field Detail

### _accessorMethod

    protected final Method _accessorMethod

### _valueSerializer

    protected final JsonSerializer<Object> _valueSerializer

### _property

    protected final BeanProperty _property

### _forceTypeInformation

    protected final boolean _forceTypeInformation

  This is a flag that is set in rare (?) cases where this serializer is used for "natural" types (boolean, int, String, double); and where we actually must force type information wrapping, even though one would not normally be added.

Constructor Detail

### JsonValueSerializer

    public JsonValueSerializer(Method valueMethod,
                               JsonSerializer<Object> ser)

Parameters:
  `ser` - Explicit serializer to use, if caller knows it (which occurs if and only if the "value method" was annotated with `JsonSerialize.using()`), otherwise null

### JsonValueSerializer

    public JsonValueSerializer(JsonValueSerializer src,
                               BeanProperty property,
                               JsonSerializer<?> ser,
                               boolean forceTypeInfo)

Method Detail

### withResolved

    public JsonValueSerializer withResolved(BeanProperty property,
                                            JsonSerializer<?> ser,
                                            boolean forceTypeInfo)

### createContextual

    public JsonSerializer<?> createContextual(SerializerProvider provider,
                                              BeanProperty property)
                                       throws JsonMappingException

  We can try to find the actual serializer for value, if we can statically figure out what the result type must be.

  Specified by:
    `createContextual` in interface `ContextualSerializer`
  Parameters:
    `provider` - Serializer provider to use for accessing config, other serializers
    `property` - Method or field that represents the property (and is used to access value to serialize). Should be available; but there may be cases where caller can not provide it and null is passed instead (in which case impls usually pass 'this' serializer as is)
  Returns:
    Serializer to use for serializing values of specified property; may be this instance or a new instance.
  Throws:
    `JsonMappingException`

### serialize

    public void serialize(Object bean,
                          com.fasterxml.jackson.core.JsonGenerator jgen,
                          SerializerProvider prov)
                   throws IOException,
                          com.fasterxml.jackson.core.JsonGenerationException

  Description copied from class: `JsonSerializer`
  Method that can be called to ask implementation to serialize values of type this serializer handles.

  Specified by:
    `serialize` in class `StdSerializer<Object>`
  Parameters:
    `bean` - Value to serialize; can not be null.
    `jgen` - Generator used to output resulting Json content
    `prov` - Provider that can be used to get serializers for serializing Objects value contains, if any.
  Throws:
    `IOException`
    `com.fasterxml.jackson.core.JsonGenerationException`

### serializeWithType

    public void serializeWithType(Object bean,
                                  com.fasterxml.jackson.core.JsonGenerator jgen,
                                  SerializerProvider provider,
                                  TypeSerializer typeSer)
                           throws IOException,
                                  com.fasterxml.jackson.core.JsonProcessingException

  Description copied from class: `JsonSerializer`
  Method that can be called to ask implementation to serialize values of type this serializer handles, using specified type serializer for embedding necessary type information.

  Default implementation will throw `UnsupportedOperationException` to indicate that proper type handling needs to be implemented.

  For simple datatypes written as a single scalar value (JSON String, Number, Boolean), implementation would look like:

        // note: method to call depends on whether this type is serialized as JSON scalar, object or Array!
        typeSer.writeTypePrefixForScalar(value, jgen);
        serialize(value, jgen, provider);
        typeSer.writeTypeSuffixForScalar(value, jgen);

  and implementations for type serialized as JSON Arrays or Objects would differ slightly, as `START-ARRAY>/`END-ARRAY` and `START-OBJECT>/`END-OBJECT` pairs need to be properly handled with respect to serializing of contents.

  ``
  Overrides:
    `serializeWithType` in class `JsonSerializer<Object>`
  Parameters:
    `bean` - Value to serialize; can not be null.
    `jgen` - Generator used to output resulting Json content
    `provider` - Provider that can be used to get serializers for serializing Objects value contains, if any.
    `typeSer` - Type serializer to use for including type information
  Throws:
    `IOException`
    `com.fasterxml.jackson.core.JsonProcessingException`

### getSchema

    public JsonNode getSchema(SerializerProvider provider,
                              Type typeHint)
                       throws JsonMappingException

  Description copied from class: `StdSerializer`
  Default implementation simply claims type is "string"; usually overriden by custom serializers.

  Specified by:
    `getSchema` in interface `SchemaAware`
  Overrides:
    `getSchema` in class `StdSerializer<Object>`
  Parameters:
    `provider` - The serializer provider.
    `typeHint` - A hint about the type.
  Returns:
    Json-schema for this serializer.
  Throws:
    `JsonMappingException`

### isNaturalTypeWithStdHandling

    protected boolean isNaturalTypeWithStdHandling(Class<?> rawType,
                                                   JsonSerializer<?> ser)

### toString

    public String toString()

  Overrides:
    `toString` in class `Object`

Copyright © 2012 fasterxml.com. All Rights Reserved.