Search in sources :

Example 1 with JsonField

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;
}
Also used : JsonField(org.nutz.json.JsonField) JsonIgnore(org.nutz.json.JsonIgnore) DecimalFormat(java.text.DecimalFormat) Mirror(org.nutz.lang.Mirror) SimpleDateFormat(java.text.SimpleDateFormat)

Example 2 with JsonField

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];
}
Also used : JsonField(org.nutz.json.JsonField) JsonEntityField(org.nutz.json.entity.JsonEntityField) Callback(org.nutz.lang.util.Callback) Callback3(org.nutz.lang.util.Callback3) Method(java.lang.reflect.Method)

Aggregations

JsonField (org.nutz.json.JsonField)2 Method (java.lang.reflect.Method)1 DecimalFormat (java.text.DecimalFormat)1 SimpleDateFormat (java.text.SimpleDateFormat)1 JsonIgnore (org.nutz.json.JsonIgnore)1 JsonEntityField (org.nutz.json.entity.JsonEntityField)1 Mirror (org.nutz.lang.Mirror)1 Callback (org.nutz.lang.util.Callback)1 Callback3 (org.nutz.lang.util.Callback3)1