EnumSerializationMixinTest.java
package com.fasterxml.jackson.databind.ser.enums;
import org.junit.jupiter.api.Test;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.testutil.DatabindTestUtil;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class EnumSerializationMixinTest extends DatabindTestUtil
{
static enum EnumBaseA {
ITEM_A {
@Override
public String toString() {
return "A_base";
}
},
@JsonAlias({"B_ORIGIN_ALIAS_1", "B_ORIGIN_ALIAS_2"})
@JsonProperty("B_ORIGIN_PROP")
ITEM_B,
@JsonAlias({"C_ORIGIN_ALIAS"})
@JsonProperty("C_COMMON")
ITEM_C_BASE,
ITEM_ORIGIN
}
static enum EnumMixinA {
ITEM_A {
@Override
public String toString() {
return "A_mixin";
}
},
@JsonProperty("B_MIXIN_PROP")
ITEM_B,
@JsonAlias({"C_MIXIN_ALIAS_1", "C_MIXIN_ALIAS_2"})
@JsonProperty("C_COMMON")
ITEM_C_MIXIN,
ITEM_MIXIN;
@Override
public String toString() {
return "SHOULD NOT USE WITH TO STRING";
}
}
@Test
public void testSerialization() throws Exception {
ObjectMapper mixinMapper = jsonMapperBuilder()
.addMixIn(EnumBaseA.class, EnumMixinA.class).build();
// equal name(), different toString() value
assertEquals(q("ITEM_A"), _w(EnumBaseA.ITEM_A, mixinMapper));
// equal name(), differnt @JsonProperty
assertEquals(q("B_MIXIN_PROP"), _w(EnumBaseA.ITEM_B, mixinMapper));
// different name(), equal @JsonProperty
assertEquals(q("C_COMMON"), _w(EnumBaseA.ITEM_C_BASE, mixinMapper));
// different name(), equal ordinal()
assertEquals(q("ITEM_ORIGIN"), _w(EnumBaseA.ITEM_ORIGIN, mixinMapper));
}
/**
* Helper method to {@link ObjectMapper#writeValueAsString(Object)}
*/
private <T> String _w(T value, ObjectMapper mapper) throws Exception {
return mapper.writeValueAsString(value);
}
}