Skip to content

Commit f4a65cb

Browse files
committed
Add a failing test for #806
1 parent 158e116 commit f4a65cb

File tree

3 files changed

+66
-7
lines changed

3 files changed

+66
-7
lines changed

src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java

+10-2
Original file line numberDiff line numberDiff line change
@@ -1213,8 +1213,14 @@ public ObjectMapper setSubtypeResolver(SubtypeResolver str) {
12131213
}
12141214

12151215
/**
1216-
* Method for changing {@link AnnotationIntrospector} used by this
1217-
* mapper instance for both serialization and deserialization
1216+
* Method for setting {@link AnnotationIntrospector} used by this
1217+
* mapper instance for both serialization and deserialization.
1218+
* Note that doing this will replace the current introspector, which
1219+
* may lead to unavailability of core Jackson annotations.
1220+
* If you want to combine handling of multiple introspectors,
1221+
* have a look at {@link com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair}.
1222+
*
1223+
* @see com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair
12181224
*/
12191225
public ObjectMapper setAnnotationIntrospector(AnnotationIntrospector ai) {
12201226
_serializationConfig = _serializationConfig.with(ai);
@@ -1234,6 +1240,8 @@ public ObjectMapper setAnnotationIntrospector(AnnotationIntrospector ai) {
12341240
* serialization
12351241
* @param deserializerAI {@link AnnotationIntrospector} to use for configuring
12361242
* deserialization
1243+
*
1244+
* @see com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair
12371245
*/
12381246
public ObjectMapper setAnnotationIntrospectors(AnnotationIntrospector serializerAI,
12391247
AnnotationIntrospector deserializerAI) {

src/test/java/com/fasterxml/jackson/databind/creators/ImplicitParamsForCreatorTest.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.fasterxml.jackson.databind.creators;
22

3-
import com.fasterxml.jackson.annotation.JsonCreator;
4-
53
import com.fasterxml.jackson.databind.*;
64
import com.fasterxml.jackson.databind.introspect.AnnotatedMember;
75
import com.fasterxml.jackson.databind.introspect.AnnotatedParameter;
@@ -16,7 +14,7 @@ static class MyParamIntrospector extends JacksonAnnotationIntrospector
1614
public String findImplicitPropertyName(AnnotatedMember param) {
1715
if (param instanceof AnnotatedParameter) {
1816
AnnotatedParameter ap = (AnnotatedParameter) param;
19-
return "param"+ap.getIndex();
17+
return "paramName"+ap.getIndex();
2018
}
2119
return super.findImplicitPropertyName(param);
2220
}
@@ -25,7 +23,8 @@ public String findImplicitPropertyName(AnnotatedMember param) {
2523
static class XY {
2624
protected int x, y;
2725

28-
@JsonCreator
26+
// annotation should NOT be needed with 2.6 any more (except for single-arg case)
27+
//@com.fasterxml.jackson.annotation.JsonCreator
2928
public XY(int x, int y) {
3029
this.x = x;
3130
this.y = y;
@@ -42,7 +41,7 @@ public void testNonSingleArgCreator() throws Exception
4241
{
4342
ObjectMapper mapper = new ObjectMapper();
4443
mapper.setAnnotationIntrospector(new MyParamIntrospector());
45-
XY value = mapper.readValue(aposToQuotes("{'param0':1,'param1':2}"), XY.class);
44+
XY value = mapper.readValue(aposToQuotes("{'paramName0':1,'paramName1':2}"), XY.class);
4645
assertNotNull(value);
4746
assertEquals(1, value.x);
4847
assertEquals(2, value.y);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.fasterxml.jackson.failing;
2+
3+
import com.fasterxml.jackson.databind.*;
4+
import com.fasterxml.jackson.databind.introspect.AnnotatedMember;
5+
import com.fasterxml.jackson.databind.introspect.AnnotatedParameter;
6+
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
7+
8+
public class ImplicitParamsForCreator806Test extends BaseMapTest
9+
{
10+
@SuppressWarnings("serial")
11+
static class MyParamIntrospector extends JacksonAnnotationIntrospector
12+
{
13+
@Override
14+
public String findImplicitPropertyName(AnnotatedMember param) {
15+
if (param instanceof AnnotatedParameter) {
16+
AnnotatedParameter ap = (AnnotatedParameter) param;
17+
return "paramName"+ap.getIndex();
18+
}
19+
return super.findImplicitPropertyName(param);
20+
}
21+
}
22+
23+
static class XY {
24+
protected int x, y;
25+
26+
// annotation should NOT be needed with 2.6 any more (except for single-arg case)
27+
//@com.fasterxml.jackson.annotation.JsonCreator
28+
public XY(int x, int y) {
29+
this.x = x;
30+
this.y = y;
31+
}
32+
}
33+
34+
/*
35+
/**********************************************************
36+
/* Test methods
37+
/**********************************************************
38+
*/
39+
40+
// for [databind#806]
41+
public void testImplicitNameWithNamingStrategy() throws Exception
42+
{
43+
ObjectMapper mapper = new ObjectMapper()
44+
.setAnnotationIntrospector(new MyParamIntrospector())
45+
.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES)
46+
;
47+
XY value = mapper.readValue(aposToQuotes("{'param_name0':1,'param_name1':2}"), XY.class);
48+
assertNotNull(value);
49+
assertEquals(1, value.x);
50+
assertEquals(2, value.y);
51+
}
52+
}

0 commit comments

Comments
 (0)