1
傑克遜自定義序列我需要定製在傑克遜POJO的序列化,這樣我可以在基於用戶輸入具有過濾
屬性應用於濾波器我施加在POJO以下注釋。
@JsonFilter("userFilter")
@JsonSerialize(using = UserSerializer.class)
自定義序列化器類如下所示。
public class UserSerializer extends JsonSerializer<User> {
@Override
public void serialize(User value, JsonGenerator jgen,
SerializerProvider provider) throws IOException,
JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
SimpleFilterProvider sfp = new SimpleFilterProvider();
// create a set that holds name of User properties that must be serialized
Set userFilterSet = new HashSet<String>();
userFilterSet.add("firstName");
userFilterSet.add("corporateOrgs");
userFilterSet.add("rights");
userFilterSet.add("requirements");
sfp.addFilter("userFilter",SimpleBeanPropertyFilter.filterOutAllExcept(userFilterSet));
// create an objectwriter which will apply the filters
ObjectWriter writer = mapper.writer(sfp);
String json = writer.writeValueAsString(value);
}
}
我可以看到,傑克遜正試圖使用定義的自定義序列化程序來序列化POJO。然而,它會以無限遞歸/ stackoverflow結束,因爲writer.writeValueAsString(value)
最終會再次調用自定義序列化程序。
顯然我在這裏沒有得到一些基本的東西。如果過濾是在序列化方法之外完成的(例如從main()
調用的方法),則過濾按預期工作。
任何人都可以請提供洞察力/鏈接文檔如何使用自定義序列化利用過濾。
我按照建議試過 – user3509599