คำอธิบายประกอบ @JsonFilter ใช้กำหนด custom filter สำหรับ serialize Java objects เราต้องใช้คลาส FilterProvider เพื่อกำหนด filter และได้ filter instance จริง Filter ที่ตั้งค่าแล้วจะถูก assign ให้ ObjectMapper ผ่าน FilterProvider
Syntax
@Target(value={ANNOTATION_TYPE, TYPE, METHOD, FIELD, PARAMETER})
@Retention(value=RUNTIME)
public @interface JsonFilter
ตัวอย่างการใช้งาน
import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
public class JsonFilterAnnotationTest {
public static void main(String args[]) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
FilterProvider filterProvider = new SimpleFilterProvider()
.addFilter("customFilter",
SimpleBeanPropertyFilter.filterOutAllExcept("empName"));
String jsonString = mapper.writer(filterProvider).writeValueAsString(new FilterBean());
System.out.println(jsonString);
}
}
@JsonFilter("customFilter")
class FilterBean {
public int empId = 110;
public String empName = "Raja Ramesh";
public String gender = "male";
}
ผลลัพธ์ (Output)
{"empName":"Raja Ramesh"}
คำอธิบาย
ในตัวอย่าง customFilter ถูกประกาศใน @JsonFilter และถูกกำหนดค่าใน FilterProvider โดยใช้ SimpleBeanPropertyFilter.filterOutAllExcept("empName") ซึ่งหมายถึง "เก็บเฉพาะ empName ตัดฟิลด์อื่นทิ้ง" ผลลัพธ์คือ JSON ที่มีแค่ empName เท่านั้น
Filter Types อื่นๆ
filterOutAllExcept(...)- เก็บเฉพาะฟิลด์ที่ระบุserializeAllExcept(...)- serialize ทุกฟิลด์ยกเว้นที่ระบุfilterOutAll()- กรองทุกฟิลด์ออก (empty object)- Custom filter - implement PropertyFilter interface เอง
Dynamic Filtering
สามารถเปลี่ยน filter ระหว่าง runtime ได้:
// สำหรับ admin - แสดงทุกอย่าง
SimpleBeanPropertyFilter.serializeAll()
// สำหรับ user - แสดงเฉพาะบางฟิลด์
SimpleBeanPropertyFilter.filterOutAllExcept("id", "name", "email")
สรุป
@JsonFilter ให้ความสามารถในการ dynamic filtering ของ JSON output ตาม context (user role, API version, etc.) โดยไม่ต้องสร้าง DTO หลายแบบ เป็นเครื่องมือทรงพลังสำหรับ REST API development