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:
  JsonFormatVisitable, SchemaAware, ContextualSerializer

    public class JsonValueSerializer
    extends StdSerializer<Object>
    implements ContextualSerializer, JsonFormatVisitable, 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

Fields
`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

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

### Method Summary

Methods
`void` `acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint)` Default implementation specifies no format.
`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, JsonGenerator jgen, SerializerProvider prov)` Method that can be called to ask implementation to serialize values of type this serializer handles.
`void` `serializeWithType(Object bean, JsonGenerator jgen, SerializerProvider provider, TypeSerializer typeSer0)` 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, findConvertingContentSerializer, findPropertyFilter, getSchema, handledType, isDefaultSerializer, wrapAndThrow, wrapAndThrow`

### Methods inherited from class com.fasterxml.jackson.databind.JsonSerializer

`getDelegatee, isEmpty, isUnwrappingSerializer, replaceDelegatee, unwrappingSerializer, usesObjectId`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface com.fasterxml.jackson.databind.jsonschema.SchemaAware

`getSchema`

### 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,
                 JsonGenerator jgen,
                 SerializerProvider prov)
                   throws IOException,
                          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`
  `JsonGenerationException`

#### serializeWithType

    public void serializeWithType(Object bean,
                         JsonGenerator jgen,
                         SerializerProvider provider,
                         TypeSerializer typeSer0)
                           throws IOException,
                                  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.
  `typeSer0` - Type serializer to use for including type information
Throws:
  `IOException`
  `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`

#### acceptJsonFormatVisitor

    public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor,
                               JavaType typeHint)
                                 throws JsonMappingException

Description copied from class: `StdSerializer`
Default implementation specifies no format. This behavior is usually overriden by custom serializers.

Specified by:
  `acceptJsonFormatVisitor` in interface `JsonFormatVisitable`
Overrides:
  `acceptJsonFormatVisitor` in class `StdSerializer<Object>`
  `typeHint` - Type of element (entity like property) being visited
Throws:
  `JsonMappingException`

#### isNaturalTypeWithStdHandling

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

#### toString

    public String toString()

Overrides:
  `toString` in class `Object`