@Nullable
    private static <T> T extractRequestFieldMeta(JavaType classType, JavaType fieldType, String fieldName,
                                                 Function<AnnotatedElement, @Nullable T> extractor) {
        // There are no standard rules to get properties of a request object. But we might assume that a request
        // object is a settable object. Before directly accessing private fields, try the patterns that are
        // commonly used in settable objects.
        //
        // - Java POJO style setters such as `void setName(String name)`.
        // - Non-standard setters such as `void name(String name)`.
        // - A single constructor.
        // - Private fields as a last resort.

        // Setter: setFieldName(field)
        final String setter = "set" + CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, fieldName);
        T result = extractFromSetter(classType, fieldType, setter, extractor);

        if (result == null) {
            // Setter: fieldName(field)
            result = extractFromSetter(classType, fieldType, fieldName, extractor);
        }

        if (result == null) {
            result = extractFromConstructor(classType, fieldType, fieldName, extractor);
        }

        if (result == null) {
            result = extractFromField(classType, fieldType, fieldName, extractor);
        }

        return result;
    }
A default {@link DescriptiveTypeInfoProvider} to create a {@link StructInfo} from a {@code typeDescriptor}.
If {@code typeDescriptor} is unknown type, Jackson is used to try to extract fields
and their metadata.
core/src/main/java/com/linecorp/armeria/internal/server/annotation/DefaultDescriptiveTypeInfoProvider.java