Skip to content

Commit 0a7fc3b

Browse files
committed
support excludeFieldsWithoutExposeAnnotation
1 parent c9e0f7b commit 0a7fc3b

File tree

2 files changed

+81
-21
lines changed

2 files changed

+81
-21
lines changed

src/main/java/com/jsoniter/extra/GsonCompatibilityMode.java

Lines changed: 56 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,26 @@
1111

1212
public class GsonCompatibilityMode extends JsoniterAnnotationSupport {
1313

14-
private final static GsonCompatibilityMode INSTANCE = new GsonCompatibilityMode();
14+
private Builder builder;
15+
16+
private GsonCompatibilityMode(Builder builder) {
17+
this.builder = builder;
18+
}
19+
20+
public static class Builder {
21+
private boolean excludeFieldsWithoutExposeAnnotation = false;
22+
23+
public Builder excludeFieldsWithoutExposeAnnotation() {
24+
excludeFieldsWithoutExposeAnnotation = true;
25+
return this;
26+
}
27+
28+
public GsonCompatibilityMode build() {
29+
return new GsonCompatibilityMode(this);
30+
}
31+
}
32+
33+
private final static GsonCompatibilityMode INSTANCE = new GsonCompatibilityMode(new Builder());
1534

1635
public static void enable() {
1736
JsoniterSpi.registerExtension(INSTANCE);
@@ -116,24 +135,42 @@ protected JsonIgnore getJsonIgnore(Annotation[] annotations) {
116135
}
117136
final Expose gsonObj = getAnnotation(
118137
annotations, Expose.class);
119-
if (gsonObj == null) {
120-
return null;
138+
if (gsonObj != null) {
139+
return new JsonIgnore() {
140+
@Override
141+
public boolean ignoreDecoding() {
142+
return !gsonObj.deserialize();
143+
}
144+
145+
@Override
146+
public boolean ignoreEncoding() {
147+
return !gsonObj.serialize();
148+
}
149+
150+
@Override
151+
public Class<? extends Annotation> annotationType() {
152+
return JsonIgnore.class;
153+
}
154+
};
121155
}
122-
return new JsonIgnore() {
123-
@Override
124-
public boolean ignoreDecoding() {
125-
return !gsonObj.deserialize();
126-
}
127-
128-
@Override
129-
public boolean ignoreEncoding() {
130-
return !gsonObj.serialize();
131-
}
132-
133-
@Override
134-
public Class<? extends Annotation> annotationType() {
135-
return JsonIgnore.class;
136-
}
137-
};
156+
if (builder.excludeFieldsWithoutExposeAnnotation) {
157+
return new JsonIgnore() {
158+
@Override
159+
public boolean ignoreDecoding() {
160+
return true;
161+
}
162+
163+
@Override
164+
public boolean ignoreEncoding() {
165+
return true;
166+
}
167+
168+
@Override
169+
public Class<? extends Annotation> annotationType() {
170+
return JsonIgnore.class;
171+
}
172+
};
173+
}
174+
return null;
138175
}
139176
}

src/test/java/com/jsoniter/output/TestGson.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,20 @@
55
import com.google.gson.annotations.Expose;
66
import com.google.gson.annotations.SerializedName;
77
import com.jsoniter.extra.GsonCompatibilityMode;
8+
import com.jsoniter.spi.JsoniterSpi;
89
import junit.framework.TestCase;
910

1011
public class TestGson extends TestCase {
1112

13+
private GsonCompatibilityMode gsonCompatibilityMode;
14+
1215
public void setUp() {
13-
GsonCompatibilityMode.enable();
16+
gsonCompatibilityMode = new GsonCompatibilityMode.Builder().build();
17+
JsoniterSpi.registerExtension(gsonCompatibilityMode);
1418
}
1519

1620
public void tearDown() {
17-
GsonCompatibilityMode.disable();
21+
JsoniterSpi.deregisterExtension(gsonCompatibilityMode);
1822
}
1923

2024
public static class TestObject1 {
@@ -61,4 +65,23 @@ public void test_getter_should_be_ignored() {
6165
output = JsonStream.serialize(obj);
6266
assertEquals("{}", output);
6367
}
68+
69+
public static class TestObject4 {
70+
public String field1;
71+
}
72+
73+
public void test_excludeFieldsWithoutExposeAnnotation() {
74+
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
75+
TestObject4 obj = new TestObject4();
76+
obj.field1 = "hello";
77+
String output = gson.toJson(obj);
78+
assertEquals("{}", output);
79+
80+
JsoniterSpi.deregisterExtension(gsonCompatibilityMode);
81+
gsonCompatibilityMode = new GsonCompatibilityMode.Builder()
82+
.excludeFieldsWithoutExposeAnnotation().build();
83+
JsoniterSpi.registerExtension(gsonCompatibilityMode);
84+
output = JsonStream.serialize(obj);
85+
assertEquals("{}", output);
86+
}
6487
}

0 commit comments

Comments
 (0)