package com.fasterxml.jackson.databind.format;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat.Shape;
import com.fasterxml.jackson.databind.*;
public class ColletionFormatShapeTest extends BaseMapTest
{
// [databind#40]: Allow serialization 'as POJO' (resulting in JSON Object)
@JsonPropertyOrder({ "size", "value" })
@JsonFormat(shape=Shape.OBJECT)
@JsonIgnoreProperties({ "empty" }) // from 'isEmpty()'
static class CollectionAsPOJO
extends ArrayList<String>
{
private static final long serialVersionUID = 1L;
@JsonProperty("size")
public int foo() { return size(); }
public List<String> getValues() {
return new ArrayList<String>(this);
}
public void setValues(List<String> v) {
addAll(v);
}
// bogus setter to handle "size" property
public void setSize(int i) { }
}
/*
/**********************************************************
/* Test methods
/**********************************************************
*/
private final static ObjectMapper MAPPER = newObjectMapper();
public void testListAsObjectRoundtrip() throws Exception
{
// First, serialize a "POJO-List"
CollectionAsPOJO list = new CollectionAsPOJO();
list.add("a");
list.add("b");
String json = MAPPER.writeValueAsString(list);
assertEquals("{\"size\":2,\"values\":[\"a\",\"b\"]}", json);
// and then bring it back!
CollectionAsPOJO result = MAPPER.readValue(json, CollectionAsPOJO.class);
assertEquals(2, result.size());
}
}