core/src/main/java/net/typedrest/BeanUtils.java
@SneakyThrows
    public static List<PropertyDescriptor> getProperties(Class<?> beanType) {
        LinkedList<PropertyDescriptor> properties = new LinkedList<>();
        for (PropertyDescriptor property : Introspector.getBeanInfo(beanType).getPropertyDescriptors()) {
            if (getAnnotation(beanType, property, Id.class).isPresent() || property.getName().equals("name")) {
                properties.addFirst(property);
            } else {
                properties.add(property);
            }
        }
        return properties;
    }
@SneakyThrows
    public static List<PropertyDescriptor> getProperties(Class<?> beanType) {
        LinkedList<PropertyDescriptor> properties = new LinkedList<>();
        for (PropertyDescriptor property : Introspector.getBeanInfo(beanType).getPropertyDescriptors()) {
            if (getAnnotation(beanType, property, Id.class).isPresent() || property.getName().equals("name")) {
                properties.addFirst(property);
            } else {
                properties.add(property);
            }
        }
        return properties;
    }
Lists all properties on a bean type. Ensures properties annotated with
{@link Id} or called "name" are always listed first.

@param beanType The type of bean to check for properties.
@return A list of properties.