Bson的skipValue方法支持部分常规Collection<JavaBean>、Map<String, JavaBean>字段类型
This commit is contained in:
@@ -61,7 +61,10 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
public void init(final ConvertFactory factory) {
|
public void init(final ConvertFactory factory) {
|
||||||
this.factory = factory;
|
this.factory = factory;
|
||||||
try {
|
try {
|
||||||
if (type == Object.class) return;
|
if (type == Object.class) {
|
||||||
|
this.creatorConstructorMembers = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Class clazz = null;
|
Class clazz = null;
|
||||||
if (type instanceof ParameterizedType) {
|
if (type instanceof ParameterizedType) {
|
||||||
@@ -229,7 +232,7 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.creatorConstructorMembers == null) { //空构造函数
|
if (this.creatorConstructorMembers == null) { //空构造函数
|
||||||
final T result = this.creator.create();
|
final T result = this.creator == null ? null : this.creator.create();
|
||||||
boolean first = true;
|
boolean first = true;
|
||||||
while (hasNext(in, first)) {
|
while (hasNext(in, first)) {
|
||||||
DeMember member = in.readFieldName(members);
|
DeMember member = in.readFieldName(members);
|
||||||
@@ -270,6 +273,7 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
in.readObjectE(typeClass);
|
in.readObjectE(typeClass);
|
||||||
|
if (this.creator == null) return null;
|
||||||
final T result = this.creator.create(constructorParams);
|
final T result = this.creator.create(constructorParams);
|
||||||
for (int i = 0; i < oc; i++) {
|
for (int i = 0; i < oc; i++) {
|
||||||
((Attribute) otherParams[i][0]).set(result, otherParams[i][1]);
|
((Attribute) otherParams[i][0]).set(result, otherParams[i][1]);
|
||||||
|
|||||||
@@ -36,6 +36,9 @@ public final class BsonFactory extends ConvertFactory<BsonReader, BsonWriter> {
|
|||||||
static final Decodeable collectionStringDecoder = instance.loadDecoder(new TypeToken<Collection<String>>() {
|
static final Decodeable collectionStringDecoder = instance.loadDecoder(new TypeToken<Collection<String>>() {
|
||||||
}.getType());
|
}.getType());
|
||||||
|
|
||||||
|
static final Decodeable collectionObjectDecoder = instance.loadDecoder(new TypeToken<Collection<Object>>() {
|
||||||
|
}.getType());
|
||||||
|
|
||||||
static final Decodeable mapStringIntegerDecoder = instance.loadDecoder(new TypeToken<Map<String, Integer>>() {
|
static final Decodeable mapStringIntegerDecoder = instance.loadDecoder(new TypeToken<Map<String, Integer>>() {
|
||||||
}.getType());
|
}.getType());
|
||||||
|
|
||||||
@@ -45,6 +48,9 @@ public final class BsonFactory extends ConvertFactory<BsonReader, BsonWriter> {
|
|||||||
static final Decodeable mapStringStringDecoder = instance.loadDecoder(new TypeToken<Map<String, String>>() {
|
static final Decodeable mapStringStringDecoder = instance.loadDecoder(new TypeToken<Map<String, String>>() {
|
||||||
}.getType());
|
}.getType());
|
||||||
|
|
||||||
|
static final Decodeable mapStringObjectDecoder = instance.loadDecoder(new TypeToken<Map<String, Object>>() {
|
||||||
|
}.getType());
|
||||||
|
|
||||||
static {
|
static {
|
||||||
instance.register(Serializable.class, objectDecoder);
|
instance.register(Serializable.class, objectDecoder);
|
||||||
instance.register(Serializable.class, objectEncoder);
|
instance.register(Serializable.class, objectEncoder);
|
||||||
|
|||||||
@@ -120,6 +120,9 @@ public class BsonReader extends Reader {
|
|||||||
case 29:
|
case 29:
|
||||||
BsonFactory.collectionStringDecoder.convertFrom(this);
|
BsonFactory.collectionStringDecoder.convertFrom(this);
|
||||||
break;
|
break;
|
||||||
|
case 30:
|
||||||
|
BsonFactory.collectionObjectDecoder.convertFrom(this);
|
||||||
|
break;
|
||||||
case 45:
|
case 45:
|
||||||
BsonFactory.mapStringIntegerDecoder.convertFrom(this);
|
BsonFactory.mapStringIntegerDecoder.convertFrom(this);
|
||||||
break;
|
break;
|
||||||
@@ -129,6 +132,9 @@ public class BsonReader extends Reader {
|
|||||||
case 49:
|
case 49:
|
||||||
BsonFactory.mapStringStringDecoder.convertFrom(this);
|
BsonFactory.mapStringStringDecoder.convertFrom(this);
|
||||||
break;
|
break;
|
||||||
|
case 50:
|
||||||
|
BsonFactory.mapStringObjectDecoder.convertFrom(this);
|
||||||
|
break;
|
||||||
case 101:
|
case 101:
|
||||||
BoolArraySimpledCoder.instance.convertFrom(this);
|
BoolArraySimpledCoder.instance.convertFrom(this);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -248,6 +248,8 @@ public class BsonWriter extends Writer {
|
|||||||
typeval = 26;
|
typeval = 26;
|
||||||
} else if (comType == String.class) {
|
} else if (comType == String.class) {
|
||||||
typeval = 29;
|
typeval = 29;
|
||||||
|
} else if (!comType.toString().startsWith("java.lang")) {
|
||||||
|
typeval = 30;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (typeval == 127 && member.getEncoder() instanceof MapEncoder) {
|
if (typeval == 127 && member.getEncoder() instanceof MapEncoder) {
|
||||||
@@ -259,6 +261,8 @@ public class BsonWriter extends Writer {
|
|||||||
typeval = 46;
|
typeval = 46;
|
||||||
} else if (keyType == String.class && valType == String.class) {
|
} else if (keyType == String.class && valType == String.class) {
|
||||||
typeval = 49;
|
typeval = 49;
|
||||||
|
} else if (keyType == String.class && !valType.toString().startsWith("java.lang")) {
|
||||||
|
typeval = 50;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
writeByte(typeval);
|
writeByte(typeval);
|
||||||
|
|||||||
Reference in New Issue
Block a user