2012-02-24 4 views
1

私は、Jacksonを使用して、Map<String, String>を実装するカスタムクラスをシリアル化しています。しかし、実際にはMap<String, String[]>(このクラスはHTTPリクエストパラメータを表しています)であり、私はJacksonがそれをMap<String, String[]>のようにシリアル化したいと思います。私はJsonValue注釈がこれには完璧であると思っていましたが(私は内部にMap<String, String[]>を返すメソッドに注釈を付けます)、ジャクソンはそれを無視しているようです。このクラスのMapスタイルの処理を無効にするにはどうすればいいですか?それをPOJOまたはJsonValue注釈でシリアル化する必要がありますか?ジャクソンは自分のクラスを地図として扱わないようにするにはどうすればいいですか?

答えて

1

ジャパンがあなたのマップが「偽造」している(つまりその署名が間違っている)ことを知る方法がないため、最良の選択はカスタムシリアライザ/デシリアライザです。

しかし、@JsonValueが機能しない場合は、バグのようです。

+0

ええ、私はコードを見ていませんが、ジャクソンがクラスがBeanのようなものであり、コレクションのようなものではないと判断すると、@ JsonValueチェックは起こります。 '@ JsonValue'は他のコンテキストでも正しく動作するようになっていますが、クラスがコレクションのように見えるときは無視されると思います。 – gsteff

+0

これは、高レベルでの正しい仮定です。しかし、@JsonValueアノテーションが利用可能になるのを理想的にチェックする必要があります。これは確かにEnumsに対して処理されます。だから、これが地図やコレクションでも使えるかどうかを見ていきます。 – StaxMan

+0

これは価値がありますが、Jackson 2.0.0ではこれが修正されました。@JsonValueは最終的にすべての型(MapおよびCollection型を含む)で機能するはずです。 – StaxMan

関連する問題