@Nullable
    private static <T> T extractResponseFieldMeta(JavaType classType, JavaType fieldType, String fieldName,
                                                  Function<AnnotatedElement, @Nullable T> extractor) {
        // There are no standard rules to get properties of a response object. But we might assume that a
        // response object is a gettable object. Before directly accessing private fields, try the patterns that
        // are commonly used in gettable objects. Although the constructor has the characteristics of setters,
        // it is added just in case.
        //
        // - Java POJO style getters such as `String getName()`.
        // - Non-standard getters such as `String name()`.
        // - Private fields.
        // - A single constructor as a last resort.

        // Getter: Field getFieldName()
        final String getter = "get" + CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, fieldName);
        T result = extractFromGetter(classType, fieldType, getter, extractor);

        if (result == null) {
            // Getter: Field fieldName()
            result = extractFromGetter(classType, fieldType, fieldName, extractor);
        }

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

        if (result == null) {
            result = extractFromConstructor(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