From f674954ae2ad39bceaeaac3ecd1e75243727ba95 Mon Sep 17 00:00:00 2001 From: "Kim, Joo Hyuk" Date: Fri, 7 Jun 2024 00:15:57 +0900 Subject: [PATCH] Enable SerializationFeature. WRITE_ENUMS_USING_TO_STRING by default --- .../tools/jackson/databind/SerializationFeature.java | 4 ++-- .../databind/deser/creators/EnumCreatorTest.java | 4 +++- .../deser/enums/EnumMapDeserializationTest.java | 8 ++++++-- .../deser/enums/EnumWithNullToString4355Test.java | 3 ++- .../jsontype/deftyping/TestDefaultForObject.java | 5 ++++- .../tools/jackson/databind/ser/EnumAsMapKeyTest.java | 3 ++- .../ser/enums/EnumSerializationMixinTest.java | 1 + .../databind/ser/jdk/EnumNamingSerializationTest.java | 6 ++++-- .../databind/ser/jdk/EnumSerializationTest.java | 11 ++++++++--- 9 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/main/java/tools/jackson/databind/SerializationFeature.java b/src/main/java/tools/jackson/databind/SerializationFeature.java index bea75e4a4c..d713cb12cb 100644 --- a/src/main/java/tools/jackson/databind/SerializationFeature.java +++ b/src/main/java/tools/jackson/databind/SerializationFeature.java @@ -276,9 +276,9 @@ public enum SerializationFeature implements ConfigFeature * Note: this feature should usually have same value * as {@link DeserializationFeature#READ_ENUMS_USING_TO_STRING}. *

- * Feature is disabled by default. + * Feature is enabled by default. */ - WRITE_ENUMS_USING_TO_STRING(false), + WRITE_ENUMS_USING_TO_STRING(true), /** * Feature that determines whether Java Enum values are serialized diff --git a/src/test/java/tools/jackson/databind/deser/creators/EnumCreatorTest.java b/src/test/java/tools/jackson/databind/deser/creators/EnumCreatorTest.java index d53fa3ae59..e433fec676 100644 --- a/src/test/java/tools/jackson/databind/deser/creators/EnumCreatorTest.java +++ b/src/test/java/tools/jackson/databind/deser/creators/EnumCreatorTest.java @@ -343,7 +343,9 @@ public void testNoArgEnumCreator() throws Exception @Test public void testEnumCreators1291() throws Exception { - ObjectMapper mapper = new ObjectMapper(); + ObjectMapper mapper = jsonMapperBuilder() + .disable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING) + .build(); String json = mapper.writeValueAsString(Enum1291.V2); Enum1291 result = mapper.readValue(json, Enum1291.class); assertSame(Enum1291.V2, result); diff --git a/src/test/java/tools/jackson/databind/deser/enums/EnumMapDeserializationTest.java b/src/test/java/tools/jackson/databind/deser/enums/EnumMapDeserializationTest.java index bbd620fdfd..33900c23de 100644 --- a/src/test/java/tools/jackson/databind/deser/enums/EnumMapDeserializationTest.java +++ b/src/test/java/tools/jackson/databind/deser/enums/EnumMapDeserializationTest.java @@ -312,7 +312,9 @@ public void testCustomEnumAsRootMapKey() throws Exception map.put(MyEnum2457.A, "1"); map.put(MyEnum2457.B, "2"); assertEquals(a2q("{'A':'1','B':'2'}"), - MAPPER.writeValueAsString(map)); + MAPPER.writer() + .without(SerializationFeature.WRITE_ENUMS_USING_TO_STRING) + .writeValueAsString(map)); // But should be able to override assertEquals(a2q("{'"+MyEnum2457.A.toString()+"':'1','"+MyEnum2457.B.toString()+"':'2'}"), @@ -335,7 +337,9 @@ public void testCustomEnumAsRootMapKeyMixin() throws Exception map.put(MyEnum2457Base.A, "1"); map.put(MyEnum2457Base.B, "2"); assertEquals(a2q("{'a_mixin':'1','b_mixin':'2'}"), - mixinMapper.writeValueAsString(map)); + mixinMapper.writer() + .without(SerializationFeature.WRITE_ENUMS_USING_TO_STRING) + .writeValueAsString(map)); // But should be able to override assertEquals(a2q("{'"+MyEnum2457Base.A.toString()+"':'1','"+MyEnum2457Base.B.toString()+"':'2'}"), diff --git a/src/test/java/tools/jackson/databind/deser/enums/EnumWithNullToString4355Test.java b/src/test/java/tools/jackson/databind/deser/enums/EnumWithNullToString4355Test.java index f6b0916b8f..42d458df65 100644 --- a/src/test/java/tools/jackson/databind/deser/enums/EnumWithNullToString4355Test.java +++ b/src/test/java/tools/jackson/databind/deser/enums/EnumWithNullToString4355Test.java @@ -27,7 +27,8 @@ public String toString() { } } - private final ObjectMapper MAPPER = newJsonMapper(); + private final ObjectMapper MAPPER = jsonMapperBuilder() + .disable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING).build(); // [databind#4355] @Test diff --git a/src/test/java/tools/jackson/databind/jsontype/deftyping/TestDefaultForObject.java b/src/test/java/tools/jackson/databind/jsontype/deftyping/TestDefaultForObject.java index 9c6d4d4aef..62a0f83b9a 100644 --- a/src/test/java/tools/jackson/databind/jsontype/deftyping/TestDefaultForObject.java +++ b/src/test/java/tools/jackson/databind/jsontype/deftyping/TestDefaultForObject.java @@ -106,7 +106,9 @@ public Validity validateBaseType(DatabindContext ctxt, JavaType baseType) { /********************************************************** */ - private final ObjectMapper MAPPER = newJsonMapper(); + private final ObjectMapper MAPPER = jsonMapperBuilder() + .disable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING) + .build(); /** * Unit test that verifies that a bean is stored with type information, @@ -248,6 +250,7 @@ public void testEnumAsObject() throws Exception // and then with it ObjectMapper m = jsonMapperBuilder() + .disable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING) .activateDefaultTyping(NoCheckSubTypeValidator.instance) .build(); String json = m.writeValueAsString(input); diff --git a/src/test/java/tools/jackson/databind/ser/EnumAsMapKeyTest.java b/src/test/java/tools/jackson/databind/ser/EnumAsMapKeyTest.java index 154cdda891..f66daaff35 100644 --- a/src/test/java/tools/jackson/databind/ser/EnumAsMapKeyTest.java +++ b/src/test/java/tools/jackson/databind/ser/EnumAsMapKeyTest.java @@ -96,7 +96,8 @@ public TypeContainer(Type type, int value) { /********************************************************************** */ - private final ObjectMapper MAPPER = newJsonMapper(); + private final ObjectMapper MAPPER = jsonMapperBuilder() + .disable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING).build(); @Test public void testMapWithEnumKeys() throws Exception diff --git a/src/test/java/tools/jackson/databind/ser/enums/EnumSerializationMixinTest.java b/src/test/java/tools/jackson/databind/ser/enums/EnumSerializationMixinTest.java index a27e3c1e2b..3dffcf506d 100644 --- a/src/test/java/tools/jackson/databind/ser/enums/EnumSerializationMixinTest.java +++ b/src/test/java/tools/jackson/databind/ser/enums/EnumSerializationMixinTest.java @@ -58,6 +58,7 @@ public String toString() { @Test public void testSerialization() throws Exception { ObjectMapper mixinMapper = jsonMapperBuilder() + .disable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING) .addMixIn(EnumBaseA.class, EnumMixinA.class).build(); // equal name(), different toString() value diff --git a/src/test/java/tools/jackson/databind/ser/jdk/EnumNamingSerializationTest.java b/src/test/java/tools/jackson/databind/ser/jdk/EnumNamingSerializationTest.java index 283da2d198..60c95ee6ce 100644 --- a/src/test/java/tools/jackson/databind/ser/jdk/EnumNamingSerializationTest.java +++ b/src/test/java/tools/jackson/databind/ser/jdk/EnumNamingSerializationTest.java @@ -22,7 +22,7 @@ public class EnumNamingSerializationTest extends DatabindTestUtil { /********************************************************** */ - final ObjectMapper MAPPER = newJsonMapper(); + final ObjectMapper MAPPER = jsonMapperBuilder().disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS).build(); @EnumNaming(EnumNamingStrategies.CamelCaseStrategy.class) static enum EnumFlavorA { @@ -117,7 +117,9 @@ public void testDesrEnumWithEnumMap() throws Exception { EnumMap enums = new EnumMap(EnumSauceB.class); enums.put(EnumSauceB.MAYO_NEZZ, "value"); - String str = MAPPER.writeValueAsString(enums); + String str = MAPPER.writer() + .without(SerializationFeature.WRITE_ENUMS_USING_TO_STRING) + .writeValueAsString(enums); assertEquals(a2q("{'mayoNezz':'value'}"), str); } diff --git a/src/test/java/tools/jackson/databind/ser/jdk/EnumSerializationTest.java b/src/test/java/tools/jackson/databind/ser/jdk/EnumSerializationTest.java index cbce9b29f5..f3b00e094d 100644 --- a/src/test/java/tools/jackson/databind/ser/jdk/EnumSerializationTest.java +++ b/src/test/java/tools/jackson/databind/ser/jdk/EnumSerializationTest.java @@ -161,7 +161,8 @@ private EnumWithJsonKey(String n) { /********************************************************************** */ - private final ObjectMapper MAPPER = newJsonMapper(); + private final ObjectMapper MAPPER = jsonMapperBuilder() + .disable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING).build(); @Test public void testSimple() throws Exception @@ -257,7 +258,9 @@ public void testToStringEnumWithEnumMap() throws Exception public void testAsIndex() throws Exception { // By default, serialize using name - ObjectMapper m = newJsonMapper(); + ObjectMapper m = jsonMapperBuilder() + .disable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING) + .build(); assertFalse(m.isEnabled(SerializationFeature.WRITE_ENUMS_USING_INDEX)); assertEquals(q("B"), m.writeValueAsString(TestEnum.B)); @@ -293,7 +296,9 @@ public void testGenericEnumSerializer() throws Exception @Test public void testEnumMapSerDefault() throws Exception { - final ObjectMapper mapper = newJsonMapper(); + final ObjectMapper mapper = jsonMapperBuilder() + .disable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING) + .build(); EnumMap m = new EnumMap(LC749Enum.class); m.put(LC749Enum.A, "value"); assertEquals("{\"A\":\"value\"}", mapper.writeValueAsString(m));