Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitcd748df

Browse files
authored
Fix LongSerializationPolicy null handling being inconsistent with Gson (#1990)
Gson does not actually use the specified LongSerializationPolicy but insteaduses type adapters which emulate the behavior. However, previously Gson'simplementation did not match LongSerializationPolicy regarding null handling.Because it is rather unlikely that LongSerializationPolicy has been used onits own, this commit adjusts its implementation to match Gson's behavior(instead of the other way around).
1 parentfe30b85 commitcd748df

File tree

2 files changed

+41
-11
lines changed

2 files changed

+41
-11
lines changed

‎gson/src/main/java/com/google/gson/LongSerializationPolicy.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
packagecom.google.gson;
1818

1919
/**
20-
* Defines the expected format for a {@code long} or {@code Long} type whenits serialized.
20+
* Defines the expected format for a {@code long} or {@code Long} type whenit is serialized.
2121
*
2222
* @since 1.3
2323
*
@@ -26,25 +26,35 @@
2626
*/
2727
publicenumLongSerializationPolicy {
2828
/**
29-
* This is the "default" serialization policy that will output a {@codelong} object as a JSON
29+
* This is the "default" serialization policy that will output a {@codeLong} object as a JSON
3030
* number. For example, assume an object has a long field named "f" then the serialized output
3131
* would be:
32-
* {@code {"f":123}}.
32+
* {@code {"f":123}}
33+
*
34+
* <p>A {@code null} value is serialized as {@link JsonNull}.
3335
*/
3436
DEFAULT() {
3537
@OverridepublicJsonElementserialize(Longvalue) {
38+
if (value ==null) {
39+
returnJsonNull.INSTANCE;
40+
}
3641
returnnewJsonPrimitive(value);
3742
}
3843
},
3944

4045
/**
4146
* Serializes a long value as a quoted string. For example, assume an object has a long field
4247
* named "f" then the serialized output would be:
43-
* {@code {"f":"123"}}.
48+
* {@code {"f":"123"}}
49+
*
50+
* <p>A {@code null} value is serialized as {@link JsonNull}.
4451
*/
4552
STRING() {
4653
@OverridepublicJsonElementserialize(Longvalue) {
47-
returnnewJsonPrimitive(String.valueOf(value));
54+
if (value ==null) {
55+
returnJsonNull.INSTANCE;
56+
}
57+
returnnewJsonPrimitive(value.toString());
4858
}
4959
};
5060

‎gson/src/test/java/com/google/gson/LongSerializationPolicyTest.java

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,31 @@ public class LongSerializationPolicyTest extends TestCase {
2929
publicvoidtestDefaultLongSerialization()throwsException {
3030
JsonElementelement =LongSerializationPolicy.DEFAULT.serialize(1556L);
3131
assertTrue(element.isJsonPrimitive());
32-
32+
3333
JsonPrimitivejsonPrimitive =element.getAsJsonPrimitive();
3434
assertFalse(jsonPrimitive.isString());
3535
assertTrue(jsonPrimitive.isNumber());
3636
assertEquals(1556L,element.getAsLong());
3737
}
38-
38+
3939
publicvoidtestDefaultLongSerializationIntegration() {
4040
Gsongson =newGsonBuilder()
41-
.setLongSerializationPolicy(LongSerializationPolicy.DEFAULT)
42-
.create();
41+
.setLongSerializationPolicy(LongSerializationPolicy.DEFAULT)
42+
.create();
4343
assertEquals("[1]",gson.toJson(newlong[] {1L },long[].class));
4444
assertEquals("[1]",gson.toJson(newLong[] {1L },Long[].class));
4545
}
4646

47+
publicvoidtestDefaultLongSerializationNull() {
48+
LongSerializationPolicypolicy =LongSerializationPolicy.DEFAULT;
49+
assertTrue(policy.serialize(null).isJsonNull());
50+
51+
Gsongson =newGsonBuilder()
52+
.setLongSerializationPolicy(policy)
53+
.create();
54+
assertEquals("null",gson.toJson(null,Long.class));
55+
}
56+
4757
publicvoidtestStringLongSerialization()throwsException {
4858
JsonElementelement =LongSerializationPolicy.STRING.serialize(1556L);
4959
assertTrue(element.isJsonPrimitive());
@@ -56,9 +66,19 @@ public void testStringLongSerialization() throws Exception {
5666

5767
publicvoidtestStringLongSerializationIntegration() {
5868
Gsongson =newGsonBuilder()
59-
.setLongSerializationPolicy(LongSerializationPolicy.STRING)
60-
.create();
69+
.setLongSerializationPolicy(LongSerializationPolicy.STRING)
70+
.create();
6171
assertEquals("[\"1\"]",gson.toJson(newlong[] {1L },long[].class));
6272
assertEquals("[\"1\"]",gson.toJson(newLong[] {1L },Long[].class));
6373
}
74+
75+
publicvoidtestStringLongSerializationNull() {
76+
LongSerializationPolicypolicy =LongSerializationPolicy.STRING;
77+
assertTrue(policy.serialize(null).isJsonNull());
78+
79+
Gsongson =newGsonBuilder()
80+
.setLongSerializationPolicy(policy)
81+
.create();
82+
assertEquals("null",gson.toJson(null,Long.class));
83+
}
6484
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp