blob: 982a37f72de1d0aace87700463e94f174765227e [file] [log] [blame]
package com.fasterxml.jackson.databind.deser;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.BaseMapTest;
import com.fasterxml.jackson.databind.ObjectMapper;
public class PropertyAliasTest extends BaseMapTest
{
static class AliasBean {
@JsonAlias({ "nm", "Name" })
public String name;
int _xyz;
int _a;
@JsonCreator
public AliasBean(@JsonProperty("a")
@JsonAlias("A") int a) {
_a = a;
}
@JsonAlias({ "Xyz" })
public void setXyz(int x) {
_xyz = x;
}
}
static class AliasBean2378 {
String partitionId;
String _id;
private AliasBean2378(boolean bogus, String partId, String userId) {
partitionId = partId;
_id = userId;
}
@JsonCreator
public static AliasBean2378 create(@JsonProperty("partitionId") String partId,
@JsonProperty("id") @JsonAlias("userId") String userId) {
return new AliasBean2378(false, partId, userId);
}
}
static class PolyWrapperForAlias {
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.WRAPPER_ARRAY)
@JsonSubTypes({
@JsonSubTypes.Type(value = AliasBean.class,name = "ab"),
})
public Object value;
protected PolyWrapperForAlias() { }
public PolyWrapperForAlias(Object v) { value = v; }
}
private final ObjectMapper MAPPER = newJsonMapper();
// [databind#1029]
public void testSimpleAliases() throws Exception
{
AliasBean bean;
// first, one indicated by field annotation, set via field
bean = MAPPER.readValue(aposToQuotes("{'Name':'Foobar','a':3,'xyz':37}"),
AliasBean.class);
assertEquals("Foobar", bean.name);
assertEquals(3, bean._a);
assertEquals(37, bean._xyz);
// then method-bound one
bean = MAPPER.readValue(aposToQuotes("{'name':'Foobar','a':3,'Xyz':37}"),
AliasBean.class);
assertEquals("Foobar", bean.name);
assertEquals(3, bean._a);
assertEquals(37, bean._xyz);
// and finally, constructor-backed one
bean = MAPPER.readValue(aposToQuotes("{'name':'Foobar','A':3,'xyz':37}"),
AliasBean.class);
assertEquals("Foobar", bean.name);
assertEquals(3, bean._a);
assertEquals(37, bean._xyz);
}
public void testAliasWithPolymorphic() throws Exception
{
PolyWrapperForAlias value = MAPPER.readValue(aposToQuotes(
"{'value': ['ab', {'nm' : 'Bob', 'A' : 17} ] }"
), PolyWrapperForAlias.class);
assertNotNull(value.value);
AliasBean bean = (AliasBean) value.value;
assertEquals("Bob", bean.name);
assertEquals(17, bean._a);
}
// [databind#2378]
public void testAliasInFactoryMethod() throws Exception
{
AliasBean2378 bean = MAPPER.readValue(aposToQuotes(
"{'partitionId' : 'a', 'userId' : '123'}"
), AliasBean2378.class);
assertEquals("a", bean.partitionId);
assertEquals("123", bean._id);
}
}