Как вызвать метод класса по имени аннотации java с помощью Джексона? - PullRequest
0 голосов
/ 09 июля 2020

Хотите знать, есть ли способ вызвать методы получения по имени свойства аннотации Джексона (например, "value") вместо имени метода (например, getName()) или указать мне правильное направление?

public class Person {

    private String name;

    @JsonProperty("value")
    public String getName() {
        return name;
    }

    @JsonProperty("value")
    public void setSet(String name) {
        this.name = name;
    }

}

Моя цель - вызвать несколько методов путем итерации по списку java имен свойств аннотации.

Ответы [ 2 ]

2 голосов
/ 09 июля 2020

Если вы действительно хотите идентифицировать и вызывать методы напрямую, вы можете использовать отражение. Что-то вроде (без управления исключениями):

        SomeObject object = ...;                                                
        Class<?> type = object.getClass();                                      
                                                                                
        for (Method method : type.getMethods()) {                               
            JsonProperty property = method.getAnnotation(JsonProperty.class);   
                                                                                
            if (property != null && property.value().equals("value")) {         
                if (method.getParameterCount() == 0) {                          
                    Object value = method.invoke(object);                       
                    ...                                                         
                }                                                               
            }                                                                   
        }
0 голосов
/ 13 июля 2020

Это то, что я использовал в качестве ответа Аллена Д.

 Map<String,Object> map = new ObjectMapper.convertValue(person, new TypeReference<Map<String,Object>>(){});
 String s = (String) map.get("value");
...