Skip to content

Commit 2ba31bd

Browse files
committed
explicitly prefer declared order of params
1 parent 6c6f546 commit 2ba31bd

File tree

4 files changed

+14
-11
lines changed

4 files changed

+14
-11
lines changed

src/main/scala/tools/jackson/module/scala/introspect/ScalaAnnotationIntrospectorModule.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,15 @@ class ScalaAnnotationIntrospectorInstance(scalaAnnotationIntrospectorModule: Sca
3838
}
3939
}
4040

41+
// For Scala, we want to use the declared order of the fields in the class
42+
override def findSerializationSortAlphabetically(config: MapperConfig[_], ann: Annotated): java.lang.Boolean = {
43+
ann match {
44+
case ac: AnnotatedClass if scalaAnnotationIntrospectorModule.isMaybeScalaBeanType(ac.getAnnotated) =>
45+
java.lang.Boolean.FALSE
46+
case _ => None.orNull
47+
}
48+
}
49+
4150
override def findImplicitPropertyName(mapperConfig: MapperConfig[_], member: AnnotatedMember): String = {
4251
member match {
4352
case af: AnnotatedField => fieldName(af).orNull

src/test/scala/tools/jackson/module/scala/ClassTagExtensionsTest.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,7 @@ class ClassTagExtensionsTest extends JacksonTest {
136136
val result = mapper.writerWithView[PublicView].writeValueAsString(instance)
137137
result should equal("""{"foo":"foo"}""")
138138
val resultInView = mapper.writerWithView[PrivateView].writeValueAsString(instance)
139-
// JSON order for non-constructor params changed in Jackson 3 due to https://github.com/FasterXML/jackson-databind/pull/4572
140-
resultInView should equal("""{"bar":42,"foo":"foo"}""")
139+
resultInView should equal("""{"foo":"foo","bar":42}""")
141140
}
142141

143142
it should "produce writer with type" in {

src/test/scala/tools/jackson/module/scala/ser/CaseClassSerializerTest.scala

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,7 @@ class CaseClassSerializerTest extends SerializerTest {
160160
val bean = new NonCaseWithBeanProperty
161161
bean.id = 1
162162
bean.bar = "foo"
163-
// JSON order for non-constructor params changed in Jackson 3 due to https://github.com/FasterXML/jackson-databind/pull/4572
164-
serialize(bean) should equal( """{"bar":"foo","id":1}""")
163+
serialize(bean) should equal( """{"id":1,"bar":"foo"}""")
165164
}
166165

167166
it should "serialize a nested case class" in {
@@ -186,10 +185,7 @@ class CaseClassSerializerTest extends SerializerTest {
186185
def isBoolean = boolean
187186
}
188187
val foo = new Foo("str", false)
189-
val mapper = newBuilder
190-
.disable(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY)
191-
.build()
192-
mapper.writeValueAsString(foo) should equal ("""{"string":"str","boolean":false}""")
188+
serialize(foo) should equal ("""{"string":"str","boolean":false}""")
193189
}
194190

195191
it should "serialize java getters returning java collections" in {

src/test/scala/tools/jackson/module/scala/ser/OptionSerializerTest.scala

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,10 @@ class OptionSerializerTest extends SerializerTest {
130130

131131
it should "support default typing" in {
132132
case class User(name: String, email: Option[String] = None)
133-
val mapper = newBuilder.disable(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY).build()
134133
val user = User("John Smith", Some("john.smith@unit.uk"))
135134
val expected = """{"name":"John Smith","email":"john.smith@unit.uk"}"""
136-
mapper.writeValueAsString(user) shouldEqual expected
137-
val mapper2 = newBuilder.disable(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY)
135+
newMapper.writeValueAsString(user) shouldEqual expected
136+
val mapper2 = newBuilder
138137
.activateDefaultTyping(new DefaultBaseTypeLimitingValidator)
139138
.build()
140139
mapper2.writeValueAsString(user) shouldEqual expected

0 commit comments

Comments
 (0)