実行時に@JsonFilterアノテーションがいつ使用されるのかを選択的に判断できますか?@JsonFilterは "JsonMappingException:BeanPropertyFilterを解決できません"をスローします
フィルタを用意していないときは、JsonMappingException例外が発生します(下記参照)。
背景:
私は動的にシリアライズされた取得Beanプロパティをフィルタリングする@JsonFilterを使用することができますrecent StackOverflow postから学びました。これは素晴らしいです。
// shortened for brevity
FilterProvider filters = new SimpleFilterProvider().addFilter("apiFilter", SimpleBeanPropertyFilter.filterOutAllExcept(filterProperties));
return mapper.filteredWriter(filters).writeValueAsString(user);
問題:自分のドメインクラスに、私のJAX-RSサービスでこのコード(CXF実装を使用)を添加した@JsonFilter("apiFilter")
を追加した後、私は動的に私のRESTfulなAPIによって返されるプロパティをフィルタリングすることができています私はフィルターをまったく適用したくないさまざまなサービスコールがあります。そのような場合は、プロパティをフィルタリングせずにドメインクラス全体を返したいと思います。私は次のように私は例外を取得していたドメインクラスを返すようにしようとする場合には:
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)
あなたの編集した例では、すべてのjax-rsサービスコールでどのライターメソッドを呼び出すかをチェックするコードを含める必要がありますか?いくつかのサービスメソッドでは、私はStringではなく実際のUserオブジェクトを返します。多くのあなたのご意見ありがとうございます! – Justin
私はそれを試してみる機会がありました。あなたが提案した "トリック"は動作しますが、私はあなたの2番目の "クリーンな"提案を得ることができませんでした。その場合、私はまだ "No FilterProvider configured"エラーを受け取ります。再度、感謝します。 – Justin
@ジャスティン:まあ、IMO問題を解決する「汚れた」回避策は、うまくいかない「きれいな」解決策よりも優れています。あなたの問題を解決するのに役立つことを願っています。 –