1 package com.fasterxml.jackson.databind.deser; 2 3 import java.util.List; 4 5 import com.fasterxml.jackson.annotation.JsonCreator; 6 import com.fasterxml.jackson.databind.BaseMapTest; 7 import com.fasterxml.jackson.databind.ObjectMapper; 8 9 public class TestObjectOrArrayDeserialization extends BaseMapTest 10 { 11 public static class SomeObject { 12 public String someField; 13 } 14 15 public static class ArrayOrObject { 16 private final List<SomeObject> objects; 17 private final SomeObject object; 18 19 @JsonCreator ArrayOrObject(List<SomeObject> objects)20 public ArrayOrObject(List<SomeObject> objects) { 21 this.objects = objects; 22 this.object = null; 23 } 24 25 @JsonCreator ArrayOrObject(SomeObject object)26 public ArrayOrObject(SomeObject object) { 27 this.objects = null; 28 this.object = object; 29 } 30 } 31 testObjectCase()32 public void testObjectCase() throws Exception { 33 ArrayOrObject arrayOrObject = new ObjectMapper().readValue("{}", ArrayOrObject.class); 34 assertNull("expected objects field to be null", arrayOrObject.objects); 35 assertNotNull("expected object field not to be null", arrayOrObject.object); 36 } 37 testEmptyArrayCase()38 public void testEmptyArrayCase() throws Exception { 39 ArrayOrObject arrayOrObject = new ObjectMapper().readValue("[]", ArrayOrObject.class); 40 assertNotNull("expected objects field not to be null", arrayOrObject.objects); 41 assertTrue("expected objects field to be an empty list", arrayOrObject.objects.isEmpty()); 42 assertNull("expected object field to be null", arrayOrObject.object); 43 } 44 testNotEmptyArrayCase()45 public void testNotEmptyArrayCase() throws Exception { 46 ArrayOrObject arrayOrObject = new ObjectMapper().readValue("[{}, {}]", ArrayOrObject.class); 47 assertNotNull("expected objects field not to be null", arrayOrObject.objects); 48 assertEquals("expected objects field to have size 2", 2, arrayOrObject.objects.size()); 49 assertNull("expected object field to be null", arrayOrObject.object); 50 } 51 52 } 53