簡體   English   中英

沒有@JsonFilter Annotation的Jackson JSON過濾器

[英]Jackson JSON Filter without @JsonFilter Annotation

我正在嘗試使用Jackson庫過濾API端點的響應。

我可以使用@JsonFilter(“[filterNameHere]”),但最終會有一個類,希望每次都能應用過濾器。

有沒有辦法只能在一個特定的實例上過濾響應?

Pizza pizza = pizzaService.getPizzaById(pizzaId);

ObjectMapper mapper = new ObjectMapper();
FilterProvider filters = new SimpleFilterProvider().addFilter("baseFilter", SimpleBeanPropertyFilter.serializeAllExcept("base"));

String json = mapper.writer(filters).writeValueAsString(pizza);

return Response.status(200).entity(json).build();

我試過環顧四周但卻找不到合適的東西。

不幸的是,filter id和class之間的關聯是靜態的,所以任何類都有或沒有; 也就是說,有時你不能使用過濾器,有時則不能。

但是,應該可以:

  • 指示要使用的“默認”過濾器(使用SimpleFilterProvider.setDefaultFilter() ),以便在沒有明確注冊的過濾器匹配id時使用。 這個過濾器基本上可以是“包括所有”過濾器,這對處理沒有影響。
  • 表示如果沒有找到過濾器ID匹配,則不進行過濾: SimpleFilterProvider.setFailOnUnknownId(false) (在提供者實例上)

所以我認為你真正想做的是第二種選擇,例如:

SimpleFilterProvider filters = new SimpleFilterProvider();
filters.setFailOnUnknownId(false);
String json = mapper.writer(filters).writeValueAsString(pizza);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM