Skip to content

Commit 8af5236

Browse files
committed
Should fix JsonCreator related bugs by using available properties if explicitly annotated.
1 parent d6c778b commit 8af5236

File tree

4 files changed

+12
-23
lines changed

4 files changed

+12
-23
lines changed

src/main/scala/com/fasterxml/jackson/module/scala/introspect/ScalaAnnotationIntrospectorModule.scala

+8-3
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,14 @@ object ScalaAnnotationIntrospector extends NopAnnotationIntrospector
9191
}
9292
}
9393

94-
override def findCreatorBinding(a: Annotated): JsonCreator.Mode =
95-
if (isScala(a) && hasCreatorAnnotation(a)) JsonCreator.Mode.PROPERTIES else null
96-
94+
override def findCreatorBinding(a: Annotated): JsonCreator.Mode = {
95+
val ann = _findAnnotation(a, classOf[JsonCreator])
96+
if (ann != null) {
97+
ann.mode()
98+
} else if (isScala(a) && hasCreatorAnnotation(a)) {
99+
JsonCreator.Mode.PROPERTIES
100+
} else null
101+
}
97102
}
98103

99104
trait ScalaAnnotationIntrospectorModule extends JacksonModule {

src/test/java/com/fasterxml/jackson/module/scala/deser/UserOfValueHolder.java

-17
This file was deleted.

src/test/java/com/fasterxml/jackson/module/scala/deser/ValueHolder.java

-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.fasterxml.jackson.annotation.JsonCreator;
44

55
public class ValueHolder {
6-
76
public final long internalValue;
87

98
private ValueHolder(long internalValue) {
@@ -14,5 +13,4 @@ private ValueHolder(long internalValue) {
1413
public static ValueHolder parse(String value) {
1514
return new ValueHolder(Long.parseLong(value));
1615
}
17-
1816
}

src/test/scala/com/fasterxml/jackson/module/scala/ser/CaseClassSerializerTest.scala

+4-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,10 @@ class CaseClassSerializerTest extends SerializerTest {
106106
}
107107

108108
it should "serialize a case class with unicode name properties" in {
109-
serialize(UnicodeNameCaseClass(23, "the name of this")) should equal( """{"name":"the name of this","winning-id":23}""")
109+
serialize(UnicodeNameCaseClass(23, "the name of this")) should (
110+
equal( """{"name":"the name of this","winning-id":23}""") or
111+
equal( """{"winning-id":23,"name":"the name of this"}""")
112+
)
110113
}
111114

112115
it should "seralize a generic case class" in {

0 commit comments

Comments
 (0)