FastJson @JSONField 源码解析
找到TypeUtils,可以看到有如**解。
-
这个时TypeUtils 的computeGetters方法,在这个方法可以看到对JSONField 注解的处理。
JSONField fieldAnnotation = null;
if(field != null){
fieldAnnotation = field.getAnnotation(JSONField.class);
if(fieldAnnotation != null){
if(!fieldAnnotation.serialize()){
continue;
}
ordinal = fieldAnnotation.ordinal();
serialzeFeatures = SerializerFeature.of(fieldAnnotation.serialzeFeatures());
parserFeatures = Feature.of(fieldAnnotation.parseFeatures());
if(fieldAnnotation.name().length() != 0){
fieldAnnotationAndNameExists = true;
propertyName = fieldAnnotation.name();
if(aliasMap != null){
propertyName = aliasMap.get(propertyName);
if(propertyName == null){
continue;
}
}
}
if(fieldAnnotation.label().length() != 0){
label = fieldAnnotation.label();
}
}
}
- 可以看到类属性上这个注解的解析,获取注解。得到注解上name的值,这个值就作为json格式化的属性名。
- 通过找到源码,打断点进行一步步调试就可以排查问题。比如对is开头的方法的特殊处理。