Bson的skipValue方法支持部分常规Collection、Map字段类型
This commit is contained in:
@@ -6,8 +6,9 @@
|
|||||||
package org.redkale.convert.bson;
|
package org.redkale.convert.bson;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.*;
|
||||||
import org.redkale.convert.*;
|
import org.redkale.convert.*;
|
||||||
import org.redkale.util.AnyValue;
|
import org.redkale.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BSON的ConvertFactory
|
* BSON的ConvertFactory
|
||||||
@@ -26,6 +27,24 @@ public final class BsonFactory extends ConvertFactory<BsonReader, BsonWriter> {
|
|||||||
|
|
||||||
static final Encodeable objectEncoder = instance.loadEncoder(Object.class);
|
static final Encodeable objectEncoder = instance.loadEncoder(Object.class);
|
||||||
|
|
||||||
|
static final Decodeable collectionIntegerDecoder = instance.loadDecoder(new TypeToken<Collection<Integer>>() {
|
||||||
|
}.getType());
|
||||||
|
|
||||||
|
static final Decodeable collectionLongDecoder = instance.loadDecoder(new TypeToken<Collection<Long>>() {
|
||||||
|
}.getType());
|
||||||
|
|
||||||
|
static final Decodeable collectionStringDecoder = instance.loadDecoder(new TypeToken<Collection<String>>() {
|
||||||
|
}.getType());
|
||||||
|
|
||||||
|
static final Decodeable mapStringIntegerDecoder = instance.loadDecoder(new TypeToken<Map<String, Integer>>() {
|
||||||
|
}.getType());
|
||||||
|
|
||||||
|
static final Decodeable mapStringLongDecoder = instance.loadDecoder(new TypeToken<Map<String, Long>>() {
|
||||||
|
}.getType());
|
||||||
|
|
||||||
|
static final Decodeable mapStringStringDecoder = instance.loadDecoder(new TypeToken<Map<String, String>>() {
|
||||||
|
}.getType());
|
||||||
|
|
||||||
static {
|
static {
|
||||||
instance.register(Serializable.class, objectDecoder);
|
instance.register(Serializable.class, objectDecoder);
|
||||||
instance.register(Serializable.class, objectEncoder);
|
instance.register(Serializable.class, objectEncoder);
|
||||||
|
|||||||
@@ -111,6 +111,24 @@ public class BsonReader extends Reader {
|
|||||||
break;
|
break;
|
||||||
case 9: readString();
|
case 9: readString();
|
||||||
break;
|
break;
|
||||||
|
case 25:
|
||||||
|
BsonFactory.collectionIntegerDecoder.convertFrom(this);
|
||||||
|
break;
|
||||||
|
case 26:
|
||||||
|
BsonFactory.collectionLongDecoder.convertFrom(this);
|
||||||
|
break;
|
||||||
|
case 29:
|
||||||
|
BsonFactory.collectionStringDecoder.convertFrom(this);
|
||||||
|
break;
|
||||||
|
case 45:
|
||||||
|
BsonFactory.mapStringIntegerDecoder.convertFrom(this);
|
||||||
|
break;
|
||||||
|
case 46:
|
||||||
|
BsonFactory.mapStringLongDecoder.convertFrom(this);
|
||||||
|
break;
|
||||||
|
case 49:
|
||||||
|
BsonFactory.mapStringStringDecoder.convertFrom(this);
|
||||||
|
break;
|
||||||
case 101:
|
case 101:
|
||||||
BoolArraySimpledCoder.instance.convertFrom(this);
|
BoolArraySimpledCoder.instance.convertFrom(this);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -240,6 +240,27 @@ public class BsonWriter extends Writer {
|
|||||||
} else if (type == String[].class) {
|
} else if (type == String[].class) {
|
||||||
typeval = 109;
|
typeval = 109;
|
||||||
}
|
}
|
||||||
|
if (typeval == 127 && member.getEncoder() instanceof CollectionEncoder) {
|
||||||
|
java.lang.reflect.Type comType = ((CollectionEncoder) member.getEncoder()).getEncoder().getType();
|
||||||
|
if (comType == Integer.class) {
|
||||||
|
typeval = 25;
|
||||||
|
} else if (comType == Long.class) {
|
||||||
|
typeval = 26;
|
||||||
|
} else if (comType == String.class) {
|
||||||
|
typeval = 29;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (typeval == 127 && member.getEncoder() instanceof MapEncoder) {
|
||||||
|
java.lang.reflect.Type keyType = ((MapEncoder) member.getEncoder()).getKeyencoder().getType();
|
||||||
|
java.lang.reflect.Type valType = ((MapEncoder) member.getEncoder()).getValencoder().getType();
|
||||||
|
if (keyType == String.class && valType == Integer.class) {
|
||||||
|
typeval = 45;
|
||||||
|
} else if (keyType == String.class && valType == Long.class) {
|
||||||
|
typeval = 46;
|
||||||
|
} else if (keyType == String.class && valType == String.class) {
|
||||||
|
typeval = 49;
|
||||||
|
}
|
||||||
|
}
|
||||||
writeByte(typeval);
|
writeByte(typeval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user