2017-02-18 2 views
0

私は2つのリソースを持ち、両方ともJSONを返します。 request1については、返されたJSOnを準備するためにjackson mixinを使用したいと思います。リクエスト2では、私はミックスインを使用したくありません。Spring MVC/Jackson:完了後のオブジェクトマッパーのリセット

質問:request1の後にmixinをリセットするにはどうすればよいですか?オブジェクトマッパーはSpring Bean/Singletonです。

コード:もちろん

@ResponseBody 
public Something getSomething1(..) { 
    .. 
    objectMapper.addMixIn(Something.class, MyMixin.class); 
    return obj; 
} 

@ResponseBody 
public Something getSomething2(..) { 
    .. 
    return obj; 
} 

は、私が最初にgetSomething2で()および他のすべての方法でのミックスインの設定を解除することができますが、私はむしろgetSomething1のcompletition後にそれをやってみたいです。したがって、objectMapperを変更したメソッドは、その変更を元に戻す必要があります。

EDIT: JBNizetが述べたように、これはスレッドセーフではありません。誰かがジャクソンミックスインを1つの方法で使う方法を知っていますか?

+0

ObjectMapperはシングルトンで、すべてのコントローラで使用され、要求は複数のコントローラまたは複数のコントローラによって同時に処理されます。同じコントローラ。 –

+0

@JBNizet私は同意します。しかし、それらのミックスインを1つの方法でしか使用しない方が良い方法を知っていますか? – NoobieNoob

+0

独自のObjectMapperインスタンスを作成および構成し、このマッパーnoを使用して明示的に応答本体をシリアル化することを除いて、代わりに、ここに記載されているようにJSONビューを使用することもできます:https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-springあるいは、あなたの何かを正しい構造を持つオブジェクトに変換するだけです。 –

答えて

0

ObjectMapper.copy()を使用して、オリジナルと同じ設定の新しいObjectMapperを作成することができます。その後、カスタムのMixInsを新しいObjectMapperインスタンスに追加します。

関連する問題