1

クラス:

public class Contact implements ContactInterface {
    private Set<ContactInfoInterface> contactInfo;

    public Map<String, ContactInfo> getContactInfo() {
        // create maps from contactInfo set
        return map;
    }
    //no setter
}

public class ContactInfo implements ContactInfoInterface {
    private String contactInfoValue;

    public String getContactInfoValue {
        return this.contactInfoValue;
    }
    public void setContactInfoValue(String value) {
        this.contactInfoValue = value;
    }
}

ジャクソン ミックスイン:

public abstract class ContactMixIn implements ContactInterface {

    @JsonProperty
    public abstract Map<String, ContactInfo> getContactInfo();
}

Jackson によって作成された json のデシリアライズに問題があります。シリアル化の結果、マップとして contactInfo を持つ json を取得しました (これは基本的に、ゲッターで返される型として持っているものです)。しかし、それを逆シリアル化すると、Jackson は contactInfo をセットとしてインスタンス化しようとしています (これは、contactInfo がセットであるためです)。しかしもちろん、Jackson は json 値を set にマップできず、奇妙な例外が発生します。だから私の質問は、その場合にマップをデシリアライズして ContactInfoInterface のセットを取得するにはどうすればよいですか?

これらはサード パーティ クラスではないため、セッターなどを追加できます。しかし、選択肢があるなら、私はむしろそれをしたくありません。

手伝ってくれてありがとう

4

2 に答える 2

0

を に直接変換する方法はありませSetMapSetは の拡張でありCollectionMapはまったく異なるオブジェクトです。手動でビルドするためContactInfoInterface必要な情報が含まれている場合は、それを行うことができます。しかし、a の形で aを返そうとしてもうまくいきません。MapSetMap

于 2013-08-02T14:33:26.787 に答える