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);
}
}