私は現在、RedisonクライアントとしてRedissonを試していますが、これまでは問題のないコードを置き換えることができました。私が今行っている唯一の問題は、キューやリストなどの分散コレクションを使用しようとすることです。 [シンプルのサブタイプを解決しようとすると、不足しているタイプID:オブジェクト用のRedissonとJson
com.fasterxml.jackson.databind.exc.InvalidTypeIdException - 私は最後の行に到達すると、私はいつもこの例外を取得
List<MyEntry> entries = // read some sample data from a file RedissonClient client = // create client RBlockingQueue<MyEntry> queue = client.getBlockingQueue("test-queue", new JsonJacksonCodec()); queue.addAll(entries); List<MyEntry> readBack = new ArrayList<>(); queue.drainTo(readBack);
型、クラスjava.lang.Object]:タイプIDプロパティ '@class'がありません。 [ソース:(io.netty.buffer.ByteBufInputStream);行:1、列:私は私のクラスに@JsonTypeInfoを追加すると1439]
、しかし、私は@JsonTypeInfoアノテーションを追加するアクセス権を持っていないクラスのほとんどを仕事に表示されます。
ここに何か不足していますか?これを回避する1つの方法は、ByteArrayCodecを使用し、自分のObjectMapperを使用してシリアル化/逆シリアル化することです(編集:別のタイプの例外をスローしようとしました!)可能であれば、多くのコーデック既に。
いつものように助けてください!
もう少し情報 - 私は単純に1つの違いで、パラメータとしてクラスをとり、およびデコーダを作成し、エンコーダがJsonJacksonCodecがどのように機能するかに似機能することを、私自身の簡単なコーデックを書いてしまった -
private static class MyCodec<T> implements Codec {
private final Decoder<Object> decoder = new Decoder<Object>() {
@Override
public T decode(ByteBuf buf, State state) throws IOException {
return mapper.readValue((InputStream) new ByteBufInputStream(buf), type);
}
};
private final ObjectMapper mapper = new ObjectMapper(new MessagePackFactory());
private final Class<T> type;
public MyCodec(Class<T> type) {
this.type = type;
}
// rest of methods...
}
私の例はうまくいきましたが、元の問題の解決策ではなく、回避策のように感じました。私は、それぞれの実装にコーデックを追加する必要はありません:)
あなたの「MyEntry」クラスを表示できますか? –
@Redisson_RuiGuこれは作業プロジェクトですが、典型的なPOJOです.JsonPropertyアノテーションを持つすべてのプロパティ、JsonCreatorを持つすべての引数コンストラクタが1つです。私はクラスのようなものとして型をシリアライズするといういくつかの問題もありました:Collections.EmptyMap、しかしそれはもっとジャクソンの問題だと思います – KingTravisG