深入杰克逊内部 - 如何从吸气剂中获取属性名称

时间:2015-02-25 13:49:17

标签: java jackson

我正在挖掘Jackson 2,我想知道getter-method名称在何处以及如何转换为属性名称。

我试过了:

PropertyName foo = new PropertyName("getKarli");
System.out.println(foo.getSimpleName());

我和我找到了BeanProperty.Std(),但是这个有很多有线构造函数。 api比预期的更大:-)是否有一个Jackson类和方法,我可以传递方法并获取json中使用的正确属性文本?

编辑:

我也试过这个,但这给了我一个NullPointer

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.BeanProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyName;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.introspect.Annotated;
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
import com.fasterxml.jackson.databind.node.ObjectNode;

public class Test {
    public String getKarli() {
        return null;
    }

    public static void main(String[] a) throws Exception {

        node.remove("geheim");
        System.out.println(node.toString());

        Annotated aa = new AnnotatedMethod(Test.class.getMethod("getKarli"), null, null);
        System.out.println(
                new ObjectMapper().getSerializationConfig().getAnnotationIntrospector().findNameForSerialization(aa)
        );
        // new BeanProperty.Std()
    }
}

1 个答案:

答案 0 :(得分:0)

找到了。

String name = BeanUtil.okNameForRegularGetter(p, p.getName(), true);
if(name == null) name = BeanUtil.okNameForIsGetter(p, p.getName(), true);