|
7 | 7 |
|
8 | 8 | import com.fasterxml.jackson.annotation.JsonCreator;
|
9 | 9 | import com.fasterxml.jackson.annotation.JsonGetter;
|
| 10 | +import com.fasterxml.jackson.annotation.JsonIgnore; |
10 | 11 | import com.fasterxml.jackson.annotation.JsonProperty;
|
11 | 12 |
|
12 | 13 | import com.fasterxml.jackson.core.type.TypeReference;
|
|
17 | 18 | import com.fasterxml.jackson.databind.exc.ValueInstantiationException;
|
18 | 19 | import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
|
19 | 20 | import com.fasterxml.jackson.databind.module.SimpleModule;
|
| 21 | +import com.fasterxml.jackson.databind.testutil.DatabindTestUtil; |
20 | 22 |
|
21 | 23 | import static org.junit.jupiter.api.Assertions.*;
|
22 | 24 |
|
23 |
| -import static com.fasterxml.jackson.databind.testutil.DatabindTestUtil.*; |
24 |
| - |
25 |
| -public class EnumCreatorTest |
| 25 | +public class EnumCreatorTest extends DatabindTestUtil |
26 | 26 | {
|
27 | 27 | protected enum EnumWithCreator {
|
28 | 28 | A, B;
|
@@ -222,6 +222,35 @@ public static Enum3280 getByValue(@JsonProperty("b") String value) {
|
222 | 222 | }
|
223 | 223 | }
|
224 | 224 |
|
| 225 | + static class DataClass4544 { |
| 226 | + public DataEnum4544 data; |
| 227 | + } |
| 228 | + |
| 229 | + public enum DataEnum4544 |
| 230 | + { |
| 231 | + TEST(0); |
| 232 | + |
| 233 | + private final int data; |
| 234 | + |
| 235 | + DataEnum4544(int data) { |
| 236 | + this.data = data; |
| 237 | + } |
| 238 | + |
| 239 | + // Important! Without ignoring accessor will find logical property |
| 240 | + // that matches Creator parameter... and assume properties-based |
| 241 | + @JsonIgnore |
| 242 | + public int getData() { |
| 243 | + return data; |
| 244 | + } |
| 245 | + |
| 246 | + @JsonCreator |
| 247 | + public static DataEnum4544 of(@ImplicitName("data") int data) { |
| 248 | + return Arrays.stream(values()) |
| 249 | + .filter(it -> it.getData() == data) |
| 250 | + .findAny().get(); |
| 251 | + } |
| 252 | + } |
| 253 | + |
225 | 254 | /*
|
226 | 255 | /**********************************************************
|
227 | 256 | /* Test methods
|
@@ -394,4 +423,17 @@ public void testEnumsFromStringUnwrapped() throws Exception
|
394 | 423 | assertEquals(TestEnumFromString.class, ob.getClass());
|
395 | 424 | assertSame(TestEnumFromString.ENUM_A, ob);
|
396 | 425 | }
|
| 426 | + |
| 427 | + // for [databind#4544] |
| 428 | + @Test |
| 429 | + void testEnumsWithImplicitNames4544() throws Exception { |
| 430 | + final ObjectMapper mapper = jsonMapperBuilder() |
| 431 | + .annotationIntrospector(new ImplicitNameIntrospector()) |
| 432 | + .build(); |
| 433 | + |
| 434 | + String json = a2q("{'data': 0}"); |
| 435 | + DataClass4544 data = mapper.readValue(json, DataClass4544.class); |
| 436 | + |
| 437 | + assertEquals(DataEnum4544.TEST, data.data); |
| 438 | + } |
397 | 439 | }
|
0 commit comments