@Override
        public void serialize(Any value, JsonGenerator jgen, SerializerProvider provider)
                throws IOException {
            jgen.writeStartObject();
            jgen.writeStringField(JSON_TYPE, value.getTypeUrl());
            jgen.writeBinaryField(JSON_VALUE, value.getValue().toByteArray());
            jgen.writeEndObject();
        }
AnySerializer converts a ProtoBuf {@link Any} object into its JSON representation.

<p>This is <b>not</b> a canonical ProtoBuf JSON representation. Let us explain what we're
trying to accomplish here:

<p>The {@link Any} ProtoBuf message is a type in the PB standard library that can store any
other arbitrary ProtoBuf message in a type-safe way, even when the server has no knowledge of
the schema of the stored message.

<p>It accomplishes this by storing a tuple of information: an URL-like type declaration for
the stored message, and the serialized binary encoding of the stored message itself. Language
specific implementations of ProtoBuf provide helper methods to encode and decode arbitrary
messages into an {@link Any} object ({@link Any#pack(Message)} in Java).

<p>We want to expose these {@link Any} objects in the REST API because they've been
introduced as part of the new GRPC interface to Conductor, but unfortunately we cannot encode
them using their canonical ProtoBuf JSON encoding. According to the docs:

<p>The JSON representation of an `Any` value uses the regular representation of the
deserialized, embedded message, with an additional field `@type` which contains the type URL.
Example:

<p>package google.profile; message Person { string first_name = 1; string last_name = 2; } {
"@type": "type.googleapis.com/google.profile.Person", "firstName": <string>, "lastName":
<string> }

<p>In order to accomplish this representation, the PB-JSON encoder needs to have knowledge of
all the ProtoBuf messages that could be serialized inside the {@link Any} message. This is
not possible to accomplish inside the Conductor server, which is simply passing through
arbitrary payloads from/to clients.

<p>Consequently, to actually expose the Message through the REST API, we must create a custom
encoding that contains the raw data of the serialized message, as we are not able to
deserialize it on the server. We simply return a dictionary with '@type' and '@value' keys,
where '@type' is identical to the canonical representation, but '@value' contains a base64
encoded string with the binary data of the serialized message.

<p>Since all the provided Conductor clients are required to know this encoding, it's always
possible to re-build the original {@link Any} message regardless of the client's language.

<p>{@see AnyDeserializer}
common/src/main/java/com/netflix/conductor/common/jackson/JsonProtoModule.java