Jackson是一個流行的Java庫,用于將Java對象序列化為JSON格式以及反序列化JSON到Java對象。在實際開發中,我們通常需要篩選掉一些不必要的屬性或者字段,只輸出我們關心的數據。這就需要用到Jackson的過濾功能。
過濾器可以幫助我們在序列化時,控制輸出哪些字段,忽略哪些字段。Jackson的過濾器分為兩種:FilterProvider
和JsonView
。
使用FilterProvider過濾
FilterProvider的作用是返回一個過濾器。我們需要自定義一個SimpleFilterProvider
,并調用addFilter
方法實現字段過濾。
SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter.filterOutAllExcept("id", "name"); SimpleFilterProvider filterProvider = new SimpleFilterProvider().addFilter("myFilter", filter); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setFilterProvider(filterProvider); //序列化對象時使用 String jsonResult = objectMapper.writeValueAsString(person);
上述代碼中,我們自定義了一個SimpleBeanPropertyFilter
對象,指定了輸出id和name這兩個屬性。然后我們再新建了一個SimpleFilterProvider
對象,將上步設置的過濾器綁定在名字為myFilter
的過濾器上。最后設置在ObjectMapper
中,完成過濾設置。
使用JsonView過濾
JsonView是另一種過濾方式。它需要定義一個或多個視圖(views),用于在序列化時選擇特定的屬性。
public class Views { public static class Public {} public static class Internal extends Public {} } //在類中使用指定視圖 @JsonView(Views.Public.class) public String name;
上述代碼中,我們定義了兩個視圖Public
和Internal
。在對象的屬性中,我們使用@JsonView
指定了視圖,表示當前屬性僅適用于Public
視圖。
ObjectWriter writer = objectMapper.writerWithView(Views.Public.class); String jsonResult = writer.writeValueAsString(person);
在序列化時,我們設置一個ObjectWriter
,并調用writerWithView
方法指定視圖,即可選擇性輸出數據。
總結:通過使用Jackson的過濾器,我們能夠很方便地控制Java對象序列化為JSON的輸出結果,過濾掉不必要的屬性或字段,達到輸出我們關心的數據的目的。