package com.fasterxml.jackson.databind.creators; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.introspect.AnnotatedMember; import com.fasterxml.jackson.databind.introspect.AnnotatedParameter; import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector; public class TestCreatorWithNamingStrategy556 extends BaseMapTest { static class RenamingCtorBean { protected String myName; protected int myAge; @JsonCreator public RenamingCtorBean(int myAge, String myName) { this.myName = myName; this.myAge = myAge; } } // Try the same with factory, too static class RenamedFactoryBean { protected String myName; protected int myAge; private RenamedFactoryBean(int a, String n, boolean foo) { myAge = a; myName = n; } @JsonCreator public static RenamedFactoryBean create(int age, String name) { return new RenamedFactoryBean(age, name, true); } } @SuppressWarnings("serial") static class MyParamIntrospector extends JacksonAnnotationIntrospector { @Override public String findImplicitPropertyName(AnnotatedMember param) { if (param instanceof AnnotatedParameter) { AnnotatedParameter ap = (AnnotatedParameter) param; switch (ap.getIndex()) { case 0: return "myAge"; case 1: return "myName"; default: return "param"+ap.getIndex(); } } return super.findImplicitPropertyName(param); } } private final ObjectMapper MAPPER = new ObjectMapper() .setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE) ; { MAPPER.setAnnotationIntrospector(new MyParamIntrospector()); } private final static String CTOR_JSON = aposToQuotes("{ 'MyAge' : 42, 'MyName' : 'NotMyRealName' }"); public void testRenameViaCtor() throws Exception { RenamingCtorBean bean = MAPPER.readValue(CTOR_JSON, RenamingCtorBean.class); assertEquals(42, bean.myAge); assertEquals("NotMyRealName", bean.myName); } public void testRenameViaFactory() throws Exception { RenamedFactoryBean bean = MAPPER.readValue(CTOR_JSON, RenamedFactoryBean.class); assertEquals(42, bean.myAge); assertEquals("NotMyRealName", bean.myName); } }