private void generateMapFields(ObjectNode fieldNode, FieldInfo field, Map<TypeSignature, String> visited,
                                   String path) {
        final ObjectNode additionalProperties = mapper.createObjectNode();

        // Keys are always converted to strings.
        final TypeSignature valueType = ((MapTypeSignature) field.typeSignature()).valueTypeSignature();
        // Create a field info with no name. Field infos with no name are considered to be unpacked.
        final FieldInfo valueFieldInfo = FieldInfo.builder("", valueType)
                                                  .location(FieldLocation.BODY)
                                                  .requirement(FieldRequirement.OPTIONAL)
                                                  .build();

        // Recursively generate the field.
        generateField(valueFieldInfo, visited, path + "/additionalProperties", additionalProperties, null);

        fieldNode.set("additionalProperties", additionalProperties);
    }
Create the JSON node for a map field.
Example for `map(string, int)`: {"type": "object", "additionalProperties": {"type": "integer"}}

@see <a href="https://json-schema.org/understanding-json-schema/reference/object.html#additional-properties">JSON Schema</a>
core/src/main/java/com/linecorp/armeria/server/docs/JsonSchemaGenerator.java