Skip to content

Commit 895bc33

Browse files
committed
bug fixed for JSONType support
1 parent 3a74dea commit 895bc33

5 files changed

Lines changed: 70 additions & 22 deletions

File tree

src/main/java/com/alibaba/fastjson/serializer/ASMSerializerFactory.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,7 @@ public ObjectSerializer createJavaBeanSerializer(Class<?> clazz, Map<String, Str
130130
}
131131

132132
String className = getGenClassName(clazz);
133-
int beanSerializeFeatures = 0;
134-
{
135-
JSONType jsonType = TypeUtils.getJSONType(clazz);
136-
if (jsonType != null) {
137-
beanSerializeFeatures = SerializerFeature.of(jsonType.serialzeFeatures());
138-
}
139-
}
133+
int beanSerializeFeatures = TypeUtils.getSerializeFeatures(clazz);
140134

141135
ClassWriter cw = new ClassWriter();
142136
cw.visit(V1_5, ACC_PUBLIC + ACC_SUPER, className, "java/lang/Object",

src/main/java/com/alibaba/fastjson/serializer/JSONSerializer.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,6 @@ public void setContext(SerialContext context) {
125125
this.context = context;
126126
}
127127

128-
public void setContext(SerialContext parent, Object object, Object fieldName) {
129-
this.setContext(parent, object, fieldName, 0);
130-
}
131-
132128
public void setContext(SerialContext parent, Object object, Object fieldName, int features) {
133129
if (isEnabled(SerializerFeature.DisableCircularReferenceDetect)) {
134130
return;

src/main/java/com/alibaba/fastjson/serializer/JavaBeanSerializer.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public class JavaBeanSerializer implements ObjectSerializer {
3939
private final FieldSerializer[] getters;
4040
private final FieldSerializer[] sortedGetters;
4141

42-
private int features = JSON.DEFAULT_GENERATE_FEATURE;
42+
private int features = 0;
4343

4444
public FieldSerializer[] getGetters() {
4545
return getters;
@@ -63,6 +63,8 @@ static Map<String, String> createAliasMap(String... aliasList) {
6363
}
6464

6565
public JavaBeanSerializer(Class<?> clazz, Map<String, String> aliasMap){
66+
this.features = TypeUtils.getSerializeFeatures(clazz);
67+
6668
{
6769
List<FieldSerializer> getterList = new ArrayList<FieldSerializer>();
6870
List<FieldInfo> fieldInfoList = TypeUtils.computeGetters(clazz, aliasMap, false);
@@ -83,15 +85,6 @@ public JavaBeanSerializer(Class<?> clazz, Map<String, String> aliasMap){
8385

8486
sortedGetters = getterList.toArray(new FieldSerializer[getterList.size()]);
8587
}
86-
87-
{
88-
JSONType annotation = clazz.getAnnotation(JSONType.class);
89-
if (annotation != null) {
90-
for (SerializerFeature feature : annotation.serialzeFeatures()) {
91-
features = SerializerFeature.config(features, feature, true);
92-
}
93-
}
94-
}
9588
}
9689

9790
protected boolean isWriteClassName(JSONSerializer serializer, Object obj, Type fieldType, Object fieldName) {
@@ -119,7 +112,7 @@ public void write(JSONSerializer serializer, Object object, Object fieldName, Ty
119112
}
120113

121114
SerialContext parent = serializer.getContext();
122-
serializer.setContext(parent, object, fieldName, 0);
115+
serializer.setContext(parent, object, fieldName, features);
123116

124117
final boolean writeAsArray = serializer.isWriteAsArray(object, fieldType);
125118

src/main/java/com/alibaba/fastjson/util/TypeUtils.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1309,6 +1309,16 @@ public static JSONType getJSONType(Class<?> clazz) {
13091309
return clazz.getAnnotation(JSONType.class);
13101310
}
13111311

1312+
public static int getSerializeFeatures(Class<?> clazz) {
1313+
JSONType annotation = clazz.getAnnotation(JSONType.class);
1314+
1315+
if (annotation == null) {
1316+
return 0;
1317+
}
1318+
1319+
return SerializerFeature.of(annotation.serialzeFeatures());
1320+
}
1321+
13121322
public static String decapitalize(String name) {
13131323
if (name == null || name.length() == 0) {
13141324
return name;
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.alibaba.json.bvt.bug;
2+
3+
import junit.framework.TestCase;
4+
5+
import org.junit.Assert;
6+
7+
import com.alibaba.fastjson.JSON;
8+
import com.alibaba.fastjson.annotation.JSONType;
9+
import com.alibaba.fastjson.serializer.SerializerFeature;
10+
11+
public class Issue101_NoneASM extends TestCase {
12+
13+
public void test_for_issure() throws Exception {
14+
VO vo = new VO();
15+
vo.a = new Object();
16+
vo.b = vo.a;
17+
vo.c = vo.a;
18+
19+
String text = JSON.toJSONString(vo);
20+
Assert.assertEquals("{\"a\":{},\"b\":{},\"c\":{}}", text);
21+
}
22+
23+
@JSONType(serialzeFeatures=SerializerFeature.DisableCircularReferenceDetect)
24+
private static class VO {
25+
26+
private Object a;
27+
private Object b;
28+
private Object c;
29+
30+
public Object getA() {
31+
return a;
32+
}
33+
34+
public void setA(Object a) {
35+
this.a = a;
36+
}
37+
38+
public Object getB() {
39+
return b;
40+
}
41+
42+
public void setB(Object b) {
43+
this.b = b;
44+
}
45+
46+
public Object getC() {
47+
return c;
48+
}
49+
50+
public void setC(Object c) {
51+
this.c = c;
52+
}
53+
54+
}
55+
}

0 commit comments

Comments
 (0)