7
有沒有辦法在ObjectMapper中註冊全局屬性過濾器?全局意味着它將被應用於所有序列化的bean。我不能使用註釋(我不能修改序列化的bean),也不知道bean有什麼屬性。 過濾應該是基於名稱的。全球房產過濾傑克遜
我的第一個想法是寫一個自定義序列化程序,但我不知道應該傳遞給構造函數。
有沒有辦法在ObjectMapper中註冊全局屬性過濾器?全局意味着它將被應用於所有序列化的bean。我不能使用註釋(我不能修改序列化的bean),也不知道bean有什麼屬性。 過濾應該是基於名稱的。全球房產過濾傑克遜
我的第一個想法是寫一個自定義序列化程序,但我不知道應該傳遞給構造函數。
我會使用FilterProvider。這有點牽扯,但不太笨拙。
import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
import org.codehaus.jackson.annotate.JsonMethod;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.ObjectWriter;
import org.codehaus.jackson.map.annotate.JsonFilter;
import org.codehaus.jackson.map.ser.FilterProvider;
import org.codehaus.jackson.map.ser.impl.SimpleBeanPropertyFilter;
import org.codehaus.jackson.map.ser.impl.SimpleFilterProvider;
public class JacksonFoo
{
public static void main(String[] args) throws Exception
{
Bar bar = new Bar();
bar.id = "42";
bar.name = "James";
bar.color = "blue";
bar.foo = new Foo();
bar.foo.id = "7";
bar.foo.size = "big";
bar.foo.height = "tall";
ObjectMapper mapper = new ObjectMapper().setVisibility(JsonMethod.FIELD, Visibility.ANY);
System.out.println(mapper.writeValueAsString(bar));
// output:
// {"id":"42","name":"James","color":"blue","foo":{"id":"7","size":"big","height":"tall"}}
String[] ignorableFieldNames = { "id", "color" };
FilterProvider filters = new SimpleFilterProvider().addFilter("filter properties by name", SimpleBeanPropertyFilter.serializeAllExcept(ignorableFieldNames));
mapper = new ObjectMapper().setVisibility(JsonMethod.FIELD, Visibility.ANY);
mapper.getSerializationConfig().addMixInAnnotations(Object.class, PropertyFilterMixIn.class);
ObjectWriter writer = mapper.writer(filters);
System.out.println(writer.writeValueAsString(bar));
// output:
// {"name":"James","foo":{"size":"big","height":"tall"}}
}
}
@JsonFilter("filter properties by name")
class PropertyFilterMixIn
{
}
class Bar
{
String id;
String name;
String color;
Foo foo;
}
class Foo
{
String id;
String size;
String height;
}
對於其他方法和更多信息,我推薦以下資源。
像一個魅力的作品:)有在傑克遜文檔改進了很多地方。 – DAN
爲了感興趣,我在http://jira.codehaus.org/browse/JACKSON-724上登錄了一個增強請求,以簡化按名稱過濾屬性所需的配置。 –
@DAN絕對!文稿特別受歡迎! (包括好文章鏈接,wiki更新) – StaxMan