理想情况下,它将看起来像这样:
List<String> props = objectMapper.getKnownProperties(MyPojo.class);
Run Code Online (Sandbox Code Playgroud)
,,没有这样的方法。通常可行的方法是将Include.ALWAYS显式设置为ObjectMapper的默认值,以反射方式实例化该类的实例,将其转换为映射,然后检查键集。但是,类仍可以覆盖给定注释的ObjectMapper的include行为。
有没有更优雅的方法?至少,有没有一种方法可以使用对象映射器覆盖类注释?
编辑:
只是为了澄清,这些pojos / javabeans / DTO是为与Jackson一起使用而设计的,并且已经绑定了注释以导致特定的序列化行为。碰巧的是,我需要动态地预先知道自己可能会遇到什么,理想情况下,无需复制杰克逊已经可用的信息。也就是说,如果另一个框架提供此功能,我很想知道。:)
使用Jackson,您可以使用以下方法自省一个类并获取可用的JSON属性:
// Construct a Jackson JavaType for your class
JavaType javaType = mapper.getTypeFactory().constructType(MyDto.class);
// Introspect the given type
BeanDescription beanDescription = mapper.getSerializationConfig().introspect(javaType);
// Find properties
List<BeanPropertyDefinition> properties = beanDescription.findProperties();
Run Code Online (Sandbox Code Playgroud)
如果您有@JsonIgnoreProperties课程级别的注释,请查看此答案。
可以使用虚拟 AnnotationIntrospector 来忽略所有注释:
objectMapper.setAnnotationIntrospector(new AnnotationIntrospector(){
@Override public Version version() {
return Version.unknownVersion();
}
});
Run Code Online (Sandbox Code Playgroud)