7
votes

Obtenir la valeur d'annotation?

Comment obtenez-vous des valeurs définies dans une annotation?

J'ai l'annotation suivante définie: p> xxx pré>

et voici la méthode qui l'utilise dans une classe de pojo p> xxx pré>

et la classe UTIL qui utilise la réflexion pour vérifier si cette méthode présente l'annotation JSPELement présente et de vérifier quelle est la valeur de type. P>

Method methods[] = classObject.getClass().getDeclaredMethods();

        JSONObject jsonObject = new JSONObject();
        try {
            for (int i = 0; i < methods.length; i++) {
                String key = methods[i].getName();
                System.out.println(key);
                if (methods[i].isAnnotationPresent(JsonElement.class) && key.startsWith(GET_CHAR_SEQUENCE)) {
                    methods[i].getDeclaredAnnotations();
                    key = key.replaceFirst(GET_CHAR_SEQUENCE, "");
                    jsonObject.put(key, methods[i].invoke(classObject));
                }

            }
            return jsonObject;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }


0 commentaires

5 Réponses :


3
votes

Vous pouvez vérifier si l'annotation appartient à JSPELement si oui, vous pouvez lancer et appeler vos méthodes

si elles sont en boucle via toutes les annotations, puis xxx

ou xxx


0 commentaires

2
votes
JsonElement jsonElement = methods[i].getAnnotation(JsonElement.class);

int type = jsonElement.type();

0 commentaires

17
votes
public enum JsonType {
    GETTER, SETTER, OTHER;
}

public @interface JsonElement {
    JsonType type() default JsonType.OTHER;
}

1 commentaires

oui je l'ai travaillé; Merci. Est-ce leur moyen de faire le "type ()" facultatif? Dès maintenant, tapez () doit être déclaré dans l'annotation JSPELement



0
votes

solution: xxx


0 commentaires

0
votes

De ce que j'ai compris, votre code fait: - Itérate sur les méthodes déclarées - Vérifiez si la méthode actuelle est annotée avec JSONELYMENT.CLASS, son nom commence par GET_CHAR_SEURENCE et la valeur du type d'annotation est égale à getter_method. - Vous construisez vos conditions JSON selon les conditions

Je ne vois pas que vous modifiez la valeur actuelle du type membre de l'annotation elle-même. Semblait comme si vous n'en avez plus besoin.

Mais quelqu'un sait-il comment faire trier cette tâche?


0 commentaires