From f06596acee43a6ba06fe906b4468641620104829 Mon Sep 17 00:00:00 2001 From: Lovro Pandzic Date: Thu, 30 Jul 2015 08:48:13 +0200 Subject: [PATCH] removed override of json creator mode --- .../ParameterNamesAnnotationIntrospector.java | 5 +++ .../paramnames/DelegatingCreatorTest.java | 45 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 src/test/java/com/fasterxml/jackson/module/paramnames/DelegatingCreatorTest.java diff --git a/src/main/java/com/fasterxml/jackson/module/paramnames/ParameterNamesAnnotationIntrospector.java b/src/main/java/com/fasterxml/jackson/module/paramnames/ParameterNamesAnnotationIntrospector.java index 5e6b796..4ac3081 100644 --- a/src/main/java/com/fasterxml/jackson/module/paramnames/ParameterNamesAnnotationIntrospector.java +++ b/src/main/java/com/fasterxml/jackson/module/paramnames/ParameterNamesAnnotationIntrospector.java @@ -36,6 +36,11 @@ public String findImplicitPropertyName(AnnotatedMember m) { @Override public JsonCreator.Mode findCreatorBinding(Annotated a) { + JsonCreator ann = a.getAnnotation(JsonCreator.class); + if (ann != null) { + return ann.mode(); + } + return creatorBinding; } diff --git a/src/test/java/com/fasterxml/jackson/module/paramnames/DelegatingCreatorTest.java b/src/test/java/com/fasterxml/jackson/module/paramnames/DelegatingCreatorTest.java new file mode 100644 index 0000000..3f8edd9 --- /dev/null +++ b/src/test/java/com/fasterxml/jackson/module/paramnames/DelegatingCreatorTest.java @@ -0,0 +1,45 @@ +package com.fasterxml.jackson.module.paramnames; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Test; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import static org.assertj.core.api.BDDAssertions.then; + +public class DelegatingCreatorTest { + + @Test + public void shouldNotOverrideJsonCreatorAnnotationWithSpecifiedMode() throws IOException { + + // given + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(new ParameterNamesModule(JsonCreator.Mode.PROPERTIES)); + + // when + ClassWithDelegatingCreator actual = objectMapper.readValue("{\"value\":\"aValue\"}", ClassWithDelegatingCreator.class); + + // then + Map props = new HashMap<>(); + props.put("value", "aValue"); + ClassWithDelegatingCreator expected = new ClassWithDelegatingCreator(props); + then(actual).isEqualToComparingFieldByField(expected); + } + + static class ClassWithDelegatingCreator { + + private final String value; + + @JsonCreator(mode = JsonCreator.Mode.DELEGATING) + ClassWithDelegatingCreator(Map props) { + this.value = props.get("value"); + } + + String getValue() { + return value; + } + } +}