Annotation @JsonFilter định nghĩa **custom filter** động để include/exclude field khi serialize. Khác với @JsonIgnore (static), filter được cấu hình runtime qua FilterProvider.
Cú pháp
@Target({ANNOTATION_TYPE, TYPE, METHOD, FIELD, PARAMETER})
@Retention(RUNTIME)
public @interface JsonFilter {
String value(); // filter name
}
Ví dụ: Filter động chỉ giữ field "empName"
import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.ser.*;
import com.fasterxml.jackson.databind.ser.impl.*;
public class JsonFilterTest {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// Định nghĩa filter: chỉ giữ "empName"
FilterProvider filters = new SimpleFilterProvider()
.addFilter("customFilter",
SimpleBeanPropertyFilter.filterOutAllExcept("empName"));
// Apply filter khi serialize
String json = mapper.writer(filters).writeValueAsString(new FilterBean());
System.out.println(json);
}
}
@JsonFilter("customFilter")
class FilterBean {
public int empId = 110;
public String empName = "Raja Ramesh";
public String gender = "male";
}
Output
{"empName":"Raja Ramesh"}
Các Filter hữu ích khác
SimpleBeanPropertyFilter.serializeAllExcept("field1", "field2")- loại trừ vài field.SimpleBeanPropertyFilter.filterOutAllExcept(...)- chỉ giữ vài field (whitelist).- Custom filter implement
PropertyFilterđể logic phức tạp.
Use case thực tế
- **Dynamic API response**: Client truyền
?fields=id,name,email→ server build filter runtime. - **Role-based serialization**: Admin thấy tất cả, User chỉ thấy public fields.
- **Multiple views cho cùng entity**: Public view vs Internal view (giống @JsonView nhưng runtime).
So sánh @JsonFilter vs @JsonView
| Đặc điểm | @JsonFilter | @JsonView |
|---|---|---|
| Cấu hình | Runtime (FilterProvider) | Compile-time (annotation trên field) |
| Linh hoạt | Rất cao (dynamic) | Cố định (static) |
| Performance | Chậm hơn (runtime lookup) | Nhanh hơn (compile-time) |
| Phù hợp | Dynamic fields, RBAC, client-driven | Fixed views, DTO pattern |