All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.dreampie.common.util.json.ModelSerializer Maven / Gradle / Ivy

There is a newer version: 1.3.0.RELEASE
Show newest version
package cn.dreampie.common.util.json;

import cn.dreampie.common.entity.Entity;
import cn.dreampie.common.util.Stringer;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.JSONSerializer;
import com.alibaba.fastjson.serializer.ObjectSerializer;

import java.io.IOException;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.Map;

/**
 * Created by ice on 14-12-31.
 */
public enum ModelSerializer implements ObjectSerializer {
  INSTANCE;

  public static ModelSerializer instance() {
    return INSTANCE;
  }


  public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
    if (object == null) {
      serializer.writeNull();
      return;
    }

    String mName;
    if (object instanceof Entity) {
      if (((Entity) object).checkMethod()) {
        Method[] methods = object.getClass().getDeclaredMethods();
        JSONField fieldAnn = null;
        for (Method m : methods) {
          fieldAnn = m.getAnnotation(JSONField.class);
          mName = m.getName();
          if ((fieldAnn == null || fieldAnn.serialize()) && m.getParameterTypes().length == 0 && mName.length() > 3 && mName.startsWith("get")
              && !hasMethod((Entity) object, mName)) {
            try {
              m.invoke(object);
            } catch (Exception e) {
              throw new JSONException("Method could not invoke.", e);
            }
          }
        }
      }
      serializer.write(((Entity) object).getAttrs());
    }

  }

  private boolean hasMethod(Entity object, String mName) {
    Map attrs = (Map) object.getAttrs();
    String name = mName.replace("get", "");
    return attrs.containsKey(Stringer.firstLowerCase(name))
        || attrs.containsKey(Stringer.underlineCase(name));
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy