我想用杰克逊做反思。
更具体地说,我想检索特定类中每个字段的类型,名称和值。我可以使用ObjectMapper
获取字段的名称和值,但我似乎无法找到检索类型的方法。我的代码如下:
ObjectMapper mapper = new ObjectMapper();
University uni = new University();
String uniJSON = mapper.writeValueAsString(uni);
System.out.println(uniJSON);
输出:
{"name":null,"ae":{"annotationExampleNumber":0},"noOfDepartments":0,"departments":null}
答案 0 :(得分:1)
您可以使用generateJsonSchema方法,如下所示
try{
ObjectMapper json=new ObjectMapper();
json.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
System.out.println(json.generateJsonSchema(University.class).toString());
}catch(Exception e){
throw new RuntimeException(e);
}
这将生成一个json模式,您可以读取该模式以获取字段数据类型。请注意,此方法会生成JSON架构,因此,它仅使用JSON允许的数据类型(字符串,数字,布尔值,对象,数组和空值)。
如果您想要Java类型,则应使用反射。请注意,存在诸如循环引用,数组等复杂问题。如果您知道要尝试识别其类型的属性的名称,则可以执行与此类似的操作。如果传递像“principal.name”
这样的参数,这适用于嵌套属性private Class<?> getPropertyType(Class<?> clazz,String property){
try{
LinkedList<String> properties=new LinkedList<String>();
properties.addAll(Arrays.asList(property.split("\\.")));
Field field = null;
while(!properties.isEmpty()){
field = clazz.getDeclaredField(properties.removeFirst());
clazz=field.getType();
}
return field.getType();
}catch(Exception e){
throw new RuntimeException(e);
}
}
答案 1 :(得分:0)
使用Jackson注释注释您的域类:
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="type")
public class University {
有关详情,请参阅此处: http://www.cowtowncoder.com/blog/archives/2010/03/entry_372.html