blob: c2953221cfe91f8aead83b3e28b7654bcc9fd426 [file] [log] [blame]
package com.fasterxml.jackson.failing;
import java.util.*;
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.BaseMapTest;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.databind.ser.PropertyWriter;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
/**
* Unit tests for ensuring that entries accessible via "any filter"
* can also be filtered with JSON Filter functionality.
*/
public class TestAnyGetter1655Filtering extends BaseMapTest
{
// [databind#1655]
@JsonFilter("CustomFilter")
static class OuterObject {
public int getExplicitProperty() {
return 42;
}
@JsonAnyGetter
public Map<String, Object> getAny() {
Map<String, Object> extra = new HashMap<>();
extra.put("dynamicProperty", "I will not serialize");
return extra;
}
}
static class CustomFilter extends SimpleBeanPropertyFilter {
@Override
public void serializeAsField(Object pojo, JsonGenerator jgen, SerializerProvider provider, PropertyWriter writer) throws Exception {
if (pojo instanceof OuterObject) {
writer.serializeAsField(pojo, jgen, provider);
}
}
}
/*
/**********************************************************
/* Test methods
/**********************************************************
*/
private final ObjectMapper MAPPER = new ObjectMapper();
// [databind#1655]
public void testAnyGetterPojo1655() throws Exception
{
FilterProvider filters = new SimpleFilterProvider().addFilter("CustomFilter", new CustomFilter());
String json = MAPPER.writer(filters).writeValueAsString(new OuterObject());
Map<?,?> stuff = MAPPER.readValue(json, Map.class);
if (stuff.size() != 2) {
fail("Should have 2 properties, got: "+stuff);
}
}
}