Как получить тип параметров моего ответа весной - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь получить JSON во внешнем интерфейсе с типами параметров.

Что-нибудь вроде:

{
    "address": "String",
    "role": {
        "admin": 0,
        "user": 1,
        "company": 2
    },
    "level": "String",
    "surname": "String",
    "imageUrl": "String",
    "name": "String",
    "birthDate": "Date",
    "email": "String"
}

Теперь я могу получить это:

{
    "address": "String",
    "role": "Role",
    "level": "String",
    "surname": "String",
    "imageUrl": "String",
    "name": "String",
    "birthDate": "Date",
    "email": "String"
}

Сделать это я использую:

public Map<String, String> getTypesOfObjectAttributes(Object o) {

        Map<String, String> fields = new HashMap<>();

        Class<?> clazz = o.getClass();

        for (Field field : clazz.getDeclaredFields()) {
            String[] type = field.getType().toString().split("\\.");
            fields.put(field.getName(), type[type.length - 1]);

        }
        return fields;
    }

И этот код используется конечной точкой для получения JSON.

Можете ли вы помочь мне получить все доступные значения моей роли перечисления ??

public enum Role {
    admin,
    user,
    company;
}

1 Ответ

0 голосов
/ 08 мая 2020

Вызов getEnumConstants(), чтобы узнать, является ли это enum, и , чтобы получить значения перечисления.

Если есть константы перечисления, вставьте вложенный Map вместо строки типа.

Вот так:

public static Map<String, Object> getTypesOfObjectAttributes(Class<?> clazz) {
    Map<String, Object> fields = new HashMap<>();
    for (Field field : clazz.getDeclaredFields()) {
        Object[] enumConstants = field.getType().getEnumConstants();
        if (enumConstants != null) {
            Map<String, Object> enums = new LinkedHashMap<>();
            for (Object enumConstant : enumConstants) {
                Enum<?> e = (Enum<?>) enumConstant;
                enums.put(e.name(), e.ordinal());
            }
            fields.put(field.getName(), enums);
        } else {
            String[] type = field.getType().toString().split("\\.");
            fields.put(field.getName(), type[type.length - 1]);
        }
    }
    return fields;
}

Test

System.out.println(getTypesOfObjectAttributes(Foo.class));
public class Foo {
    String address;
    Role role;
    String level;
    String surname;
    String imageUrl;
    String name;
    Date birthDate;
    String email;
}
public enum Role {
    admin,
    user,
    company;
}

Выход

{address=String, role={admin=0, user=1, company=2}, level=String, surname=String, imageUrl=String, name=String, birthDate=Date, email=String}
...