2016-12-24 47 views
3

鑑於以下傑克遜註解類:如何使用jackson獲取基於json屬性名稱的讀取器方法?

public class AClass { 

    @JsonProperty("propertyName") 
    private String anyProperty 

    public String getAnyProperty() { 
    ... 
    } 

... 
} 

或混入配置:

public class AClass { 

    private String anyProperty 

    public String getAnyProperty() { 
    ... 
    } 

... 
} 

public interface AClassMixin { 

    @JsonProperty(value = "propertyName") 
    String getAnyProperty(); 
} 

我怎樣才能用傑克遜propertyName的「閱讀方法的JSON財產」

我需要的東西?像這樣:

ObjectMapper mapper = new ObjectMapper(); 

    Method method = mapper.getReaderMethodForProperty("propertyName", Aclass.class); 

回答

2

Constr UCT公司JavaType爲bean類

JavaType target = objectMapper.constructType(AClass.class); 

然後使用ObjectMapperDeserializationConfig對其進行自省。這會給你一個BeanDescription

BeanDescription beanDescription = objectMapper.getDeserializationConfig().introspect(target) 

您可以使用它獲取其BeanPropertyDefinition實例的列表。

List<BeanPropertyDefinition> beanPropertyDefinitions = beanDescription.findProperties(); 

每個BeanPropertyDefinition有方法來檢索getter和setter方法(和其他東西)爲AnnotatedMember值,從中可以獲取Member(你需要轉換爲Method)。

for (BeanPropertyDefinition bpd : beanPropertyDefinitions) { 
    AnnotatedMember annotatedMember = bpd.getAccessor(); 
    Member member = annotatedMember.getMember(); 
    if (member instanceof Method) { 
     Method getterMethod = (Method) member; 
     System.out.println(getterMethod.getName()); 
    } 
}