Skip to content

Commit

Permalink
JSONField support SerializerFeature.BrowserCompatible, for issue #1764
Browse files Browse the repository at this point in the history
  • Loading branch information
wenshao committed Mar 13, 2018
1 parent ab9cfc2 commit 504496c
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/main/java/com/alibaba/fastjson/serializer/FieldSerializer.java
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,16 @@ public void writeValue(JSONSerializer serializer, Object propertyValue) throws E
return;
}

if ((features & SerializerFeature.BrowserCompatible.mask) != 0
&& propertyValue != null
&& (fieldInfo.fieldClass == long.class || fieldInfo.fieldClass == Long.class)) {
long value = (Long) propertyValue;
if (value > 9007199254740991L || value < -9007199254740991L) {
serializer.getWriter().writeString(Long.toString(value));
return;
}
}

valueSerializer.write(serializer, propertyValue, fieldInfo.name, fieldInfo.fieldType, fieldFeatures);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ public ObjectSerializer createJavaBeanSerializer(SerializeBeanInfo beanInfo) {
if (SerializerFeature.WriteNonStringValueAsString == feature //
|| SerializerFeature.WriteEnumUsingToString == feature //
|| SerializerFeature.NotWriteDefaultValue == feature
|| SerializerFeature.BrowserCompatible == feature
|| SerializerFeature.WriteClassName == feature) {
asm = false;
break;
Expand Down
22 changes: 22 additions & 0 deletions src/test/java/com/alibaba/json/bvt/issue_1700/Issue1764.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.alibaba.json.bvt.issue_1700;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
import junit.framework.TestCase;

import static com.alibaba.fastjson.serializer.SerializerFeature.BrowserCompatible;

public class Issue1764 extends TestCase {
public void test_for_issue() throws Exception {
Model model = new Model();
model.value = 9007199254741992L;

String str = JSON.toJSONString(model);
System.out.println(str);
}

public static class Model {
@JSONField(serialzeFeatures = BrowserCompatible)
public long value;
}
}

0 comments on commit 504496c

Please sign in to comment.