private FieldInfo fieldInfos(JavaType javaType, String name, String internalName, JavaType fieldType) {
        TypeSignature typeSignature = toTypeSignature(fieldType);
        final FieldRequirement fieldRequirement;
        if (typeSignature.type() == TypeSignatureType.OPTIONAL) {
            typeSignature = ((ContainerTypeSignature) typeSignature).typeParameters().get(0);
            if (typeSignature.type().hasTypeDescriptor()) {
                final Object descriptor =
                        ((DescriptiveTypeSignature) typeSignature).descriptor();
                if (descriptor instanceof Class) {
                    fieldType = mapper.constructType((Class<?>) descriptor);
                }
            }
            fieldRequirement = FieldRequirement.OPTIONAL;
        } else {
            fieldRequirement = fieldRequirement(javaType, fieldType, internalName);
        }

        final DescriptionInfo descriptionInfo = fieldDescriptionInfo(javaType, fieldType, internalName);
        return FieldInfo.builder(name, typeSignature)
                        .requirement(fieldRequirement)
                        .descriptionInfo(descriptionInfo)
                        .build();
    }
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