2017-08-04 2 views
0

J'ai une annotation et pendant son utilisation d'exécution sur une méthode, je veux le convertir 9 et toutes ses valeurs de propriété) en objet JSON.Comment convertir une annotation (toutes ses propriétés diff) en un objet JSON en utilisant Jackson/ObjectMapper?

L'annotation:

public @interface MyAnnotation { 
    String name(); 
    Integer age(); 
} 

utilisation de celui-ci:

public class MyClass { 
    @MyAnnotation(name = "test", age = 21) 
    public String getInfo() 
    { ...elided... } 
} 

Lorsque vous utilisez la réflexion sur un objet de type MyClass et obtenir l'annotation de sa méthode getInfo, je voudrais pouvoir convertir l'annotation en JSON. Mais il n'y a pas de champs (puisque @interfaces ne peut pas avoir de champs), donc est-il possible de configurer un ObjectMapper pour utiliser les méthodes comme propriétés à la place?

//This just prints {} 
new ObjectMapper().writeValueAsString(method.getAnnotation(MyAnnotation.class)); 

Répondre

0

a trouvé la réponse:

Utilisez @JsonGetter et transmettez-lui le nom du champ que vous voulez représenter.

Exemple:

public @interface MyAnnotation { 

    @JsonGetter(value = "name") 
    String name(); 

    @JsonGetter(value = "age") 
    Integer age(); 
} 

Affichera comme JSON: {"name":"test","age":21}