Có thể chọn lọc xác định khi chú thích @JsonFilter được sử dụng trong thời gian chạy không?@JsonFilter ném "JsonMappingException: Không thể giải quyết BeanPropertyFilter"
Tôi nhận được JsonMapping ngoại lệ ngoại lệ (xem bên dưới) khi tôi không cung cấp bộ lọc.
Bối cảnh:
tôi học được từ một recent StackOverflow post mà tôi có thể sử dụng @JsonFilter để tự động lọc các thuộc tính bean việc đăng. Điều này làm việc tuyệt vời. Sau khi thêm @JsonFilter("apiFilter")
đến lớp tên miền của tôi và với việc bổ sung của mã này trong dịch vụ jax-rs tôi (bằng cách sử dụng thực hiện CXF), tôi có thể tự động lọc các thuộc tính trả về bởi API RESTful của tôi:
// shortened for brevity
FilterProvider filters = new SimpleFilterProvider().addFilter("apiFilter", SimpleBeanPropertyFilter.filterOutAllExcept(filterProperties));
return mapper.filteredWriter(filters).writeValueAsString(user);
Vấn đề có các cuộc gọi dịch vụ khác nhau mà tôi không muốn áp dụng bộ lọc. Trong những trường hợp đó, tôi muốn trả về toàn bộ lớp miền mà không lọc bất kỳ thuộc tính nào. Trong trường hợp tôi chỉ cố gắng để trở lại lớp miền tôi nhận được một ngoại lệ như sau:
Caused by: org.codehaus.jackson.map.JsonMappingException: Can not resolve BeanPropertyFilter with id 'apiFilter'; no FilterProvider configured
at org.codehaus.jackson.map.ser.BeanSerializer.findFilter(BeanSerializer.java:252)
at org.codehaus.jackson.map.ser.BeanSerializer.serializeFieldsFiltered(BeanSerializer.java:216)
at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:140)
trong ví dụ đã chỉnh sửa của bạn, tôi có cần bao gồm mã để kiểm tra phương thức nhà văn nào cần gọi trong mọi cuộc gọi dịch vụ jax-rs không? trong một số phương thức dịch vụ, tôi trả về một đối tượng User thực tế thay vì một String. Rất cám ơn cho đầu vào của bạn! – Justin
ok, tôi đã có cơ hội dùng thử. "lừa" bạn đề nghị làm việc nhưng tôi không thể nhận được đề xuất "sạch" thứ hai của bạn để làm việc. trong trường hợp đó tôi vẫn nhận được lỗi "no FilterProvider configure". cảm ơn một lần nữa. – Justin
@Justin: tốt, IMO một cách giải quyết "không sạch" giải quyết một vấn đề là tốt hơn so với một "sạch" một không làm việc :). Hy vọng nó đã giúp giải quyết vấn đề của bạn. –