use of org.nutz.json.JsonField in project nutz by nutzam.
the class JsonEntityField method eval.
@SuppressWarnings({ "deprecation", "rawtypes" })
public static JsonEntityField eval(Mirror<?> mirror, Field fld) {
if (fld == null) {
return null;
}
// if (fld.getName().startsWith("_") || fld.getName().startsWith("$"))
if (fld.getName().startsWith("$") && fld.getAnnotation(JsonField.class) == null)
return null;
JsonField jf = fld.getAnnotation(JsonField.class);
JsonEntityField jef = new JsonEntityField();
jef.genericType = Lang.getFieldType(mirror, fld);
jef.name = Strings.sBlank(null == jf ? null : jf.value(), fld.getName());
jef.ejecting = mirror.getEjecting(fld.getName());
jef.injecting = mirror.getInjecting(fld.getName());
// 瞬时变量和明确声明忽略的,变 ignore
if (Modifier.isTransient(fld.getModifiers()) || (null != jf && jf.ignore())) {
jef.setIgnore(true);
}
// 判断字段是否被强制输出为字符串
if (null != jf) {
jef.setForceString(jf.forceString());
String dataFormat = jf.dataFormat();
if (Strings.isBlank(dataFormat)) {
dataFormat = jf.dateFormat();
}
if (!Strings.isBlank(dataFormat)) {
Mirror jfmirror = Mirror.me(jef.genericType);
if (jfmirror.isNumber()) {
jef.dataFormat = new DecimalFormat(dataFormat);
} else if (jfmirror.isDateTimeLike()) {
jef.dataFormat = new SimpleDateFormat(dataFormat);
}
}
}
JsonIgnore jsonIgnore = fld.getAnnotation(JsonIgnore.class);
if (jsonIgnore != null) {
Mirror<?> fldMirror = Mirror.me(fld.getType());
jef.isInt = fldMirror.isInt();
jef.isDouble = fldMirror.isDouble() || fldMirror.isFloat();
jef.hasJsonIgnore = true;
if (jef.isDouble)
jef.ignoreNullDouble = jsonIgnore.null_double();
if (jef.isInt)
jef.ignoreNullInt = jsonIgnore.null_int();
}
return jef;
}
use of org.nutz.json.JsonField in project nutz by nutzam.
the class JsonEntityFieldMakerImpl method make.
@Override
public JsonEntityField make(Mirror<?> mirror, final Method method) {
final JsonField jf = method.getAnnotation(JsonField.class);
// 忽略方法
if (null == jf || jf.ignore())
return null;
final JsonEntityField[] result = new JsonEntityField[1];
// 如果有,尝试作新的 Entity
Callback<Method> whenError = new Callback<Method>() {
// 给定方法即不是 getter 也不是 setter,靠!玩我!
public void invoke(Method m) {
throw Lang.makeThrow(JsonException.class, "JsonField '%s' should be getter/setter pair!", m);
}
};
Callback3<String, Method, Method> whenOk = new Callback3<String, Method, Method>() {
public void invoke(String name, Method getter, Method setter) {
// 防止错误
if (null == getter || null == setter || Strings.isBlank(name)) {
throw Lang.makeThrow(JsonException.class, "JsonField '%s' should be getter/setter pair!", method);
}
// 加入字段表
JsonEntityField ef = JsonEntityField.eval(Strings.sBlank(jf.value(), name), getter, setter);
result[0] = ef;
}
};
Mirror.evalGetterSetter(method, whenOk, whenError);
return result[0];
}
Aggregations