欢迎使用CSDN-markdown编辑器

来源:互联网 发布:刷黄钻软件手机版 编辑:程序博客网 时间:2024/06/05 18:33

因为实体类中包含业务方法, 并且业务方法还是以get开头的, 因此在两种方法序列化的时候都会调用次方法; 当然就会抛出异常了.
org.json 会忽略异常!

FastJSON 会抛出异常,并且异常信息简单, 异常信息如下:

[ERROR] [16:06:08] com.jc.rest.JsonExceptionHandler: [30] - toJSON errorcom.alibaba.fastjson.JSONException: toJSON error    at com.alibaba.fastjson.JSON.toJSON(JSON.java:895)    at com.alibaba.fastjson.JSON.toJSON(JSON.java:812)    at com.alibaba.fastjson.JSON.toJSON(JSON.java:840)    at com.alibaba.fastjson.JSON.toJSON(JSON.java:812)    at com.jc.utils.HttpUtils.postJSON(HttpUtils.java:44)

下面是org.json.JSONObject 中代码,

 private void populateMap(Object bean) {        Class klass = bean.getClass();        boolean includeSuperClass = klass.getClassLoader() != null;        Method[] methods = includeSuperClass?klass.getMethods():klass.getDeclaredMethods();        for(int i = 0; i < methods.length; ++i) {            try {                Method ignore = methods[i];                if(Modifier.isPublic(ignore.getModifiers())) {                    String name = ignore.getName();                    String key = "";                    if(name.startsWith("get")) {                        if(!"getClass".equals(name) && !"getDeclaringClass".equals(name)) {                            key = name.substring(3);                        } else {                            key = "";                        }                    } else if(name.startsWith("is")) {                        key = name.substring(2);                    }                    if(key.length() > 0 && Character.isUpperCase(key.charAt(0)) && ignore.getParameterTypes().length == 0) {                        if(key.length() == 1) {                            key = key.toLowerCase();                        } else if(!Character.isUpperCase(key.charAt(1))) {                            key = key.substring(0, 1).toLowerCase() + key.substring(1);                        }                        Object result = ignore.invoke(bean, (Object[])null);                        if(result != null) {                            this.map.put(key, wrap(result));                        }                    }                }            }catch (Exception var10){        }        }    }

而fastJSON的com.alibaba.fastjson.JSON类中的toJSON方法代码如下, 它会抛出异常,导致序列化失败

public static Object toJSON(Object javaObject, SerializeConfig config) {        if(javaObject == null) {            return null;        } else if(javaObject instanceof JSON) {            return javaObject;        } else {            Iterator var17;            Object var21;            if(javaObject instanceof Map) {                Map var11 = (Map)javaObject;                JSONObject var14 = new JSONObject(var11.size());                var17 = var11.entrySet().iterator();                while(var17.hasNext()) {                    Entry var20 = (Entry)var17.next();                    var21 = var20.getKey();                    String var23 = TypeUtils.castToString(var21);                    Object var24 = toJSON(var20.getValue());                    var14.put(var23, var24);                }                return var14;            } else if(javaObject instanceof Collection) {                Collection var10 = (Collection)javaObject;                JSONArray var13 = new JSONArray(var10.size());                var17 = var10.iterator();                while(var17.hasNext()) {                    Object var19 = var17.next();                    var21 = toJSON(var19);                    var13.add(var21);                }                return var13;            } else {                Class clazz = javaObject.getClass();                if(clazz.isEnum()) {                    return ((Enum)javaObject).name();                } else if(clazz.isArray()) {                    int var12 = Array.getLength(javaObject);                    JSONArray var16 = new JSONArray(var12);                    for(int var18 = 0; var18 < var12; ++var18) {                        var21 = Array.get(javaObject, var18);                        Object var22 = toJSON(var21);                        var16.add(var22);                    }                    return var16;                } else if(ParserConfig.isPrimitive(clazz)) {                    return javaObject;                } else {                    ObjectSerializer serializer = config.getObjectWriter(clazz);                    if(serializer instanceof JavaBeanSerializer) {                        JavaBeanSerializer var15 = (JavaBeanSerializer)serializer;                        JSONObject json = new JSONObject();                        try {                            Map e = var15.getFieldValuesMap(javaObject);                            Iterator jsonValue = e.entrySet().iterator();                            while(jsonValue.hasNext()) {                                Entry entry = (Entry)jsonValue.next();                                json.put((String)entry.getKey(), toJSON(entry.getValue()));                            }                            return json;                        }catch(Exception){                            throw new JSONException("toJSON error", var9);                        }                    } else {                        String text = toJSONString(javaObject);                        return parse(text);                    }                }            }        }    }
0 0
原创粉丝点击