blob: 48d92044356550c73989b25c37eaf6b80f00999a [file] [log] [blame]
package org.codehaus.jackson.map.ser;
import org.codehaus.jackson.map.*;
import org.codehaus.jackson.map.annotate.JsonFilter;
import org.codehaus.jackson.map.ser.impl.*;
/**
* Tests for verifying that bean property filtering (new with 1.7)
* works as expected.
*
* @since 1.7
*/
public class TestFiltering extends BaseMapTest
{
/*
/**********************************************************
/* Helper types
/**********************************************************
*/
@JsonFilter("RootFilter")
static class Bean {
public String a = "a";
public String b = "b";
}
/*
/**********************************************************
/* Unit tests
/**********************************************************
*/
public void testSimpleInclusionFilter() throws Exception
{
ObjectMapper mapper = new ObjectMapper();
FilterProvider prov = new SimpleFilterProvider().addFilter("RootFilter",
SimpleBeanPropertyFilter.filterOutAllExcept("a"));
assertEquals("{\"a\":\"a\"}", mapper.writer(prov).writeValueAsString(new Bean()));
// [JACKSON-504]: also verify it works via mapper
mapper = new ObjectMapper();
mapper.setFilters(prov);
assertEquals("{\"a\":\"a\"}", mapper.writeValueAsString(new Bean()));
}
public void testSimpleExclusionFilter() throws Exception
{
ObjectMapper mapper = new ObjectMapper();
FilterProvider prov = new SimpleFilterProvider().addFilter("RootFilter",
SimpleBeanPropertyFilter.serializeAllExcept("a"));
assertEquals("{\"b\":\"b\"}", mapper.writer(prov).writeValueAsString(new Bean()));
}
// should handle missing case gracefully
public void testMissingFilter() throws Exception
{
// First: default behavior should be to throw an exception
ObjectMapper mapper = new ObjectMapper();
try {
mapper.writeValueAsString(new Bean());
fail("Should have failed without configured filter");
} catch (JsonMappingException e) { // should be resolved to a MappingException (internally may be something else)
verifyException(e, "Can not resolve BeanPropertyFilter with id 'RootFilter'");
}
// but when changing behavior, should work difference
SimpleFilterProvider fp = new SimpleFilterProvider().setFailOnUnknownId(false);
mapper.setFilters(fp);
String json = mapper.writeValueAsString(new Bean());
assertEquals("{\"a\":\"a\",\"b\":\"b\"}", json);
}
// defaulting, as per [JACKSON-449]
public void testDefaultFilter() throws Exception
{
ObjectMapper mapper = new ObjectMapper();
FilterProvider prov = new SimpleFilterProvider().setDefaultFilter(SimpleBeanPropertyFilter.filterOutAllExcept("b"));
assertEquals("{\"b\":\"b\"}", mapper.writer(prov).writeValueAsString(new Bean()));
}
}