Convert增加BiFunction<Attribute, Object, Object> fieldFunc参数
This commit is contained in:
@@ -6,6 +6,8 @@
|
|||||||
package org.redkale.convert;
|
package org.redkale.convert;
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
import org.redkale.util.Attribute;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 二进制序列化/反序列化操作类
|
* 二进制序列化/反序列化操作类
|
||||||
@@ -33,4 +35,10 @@ public abstract class BinaryConvert<R extends Reader, W extends Writer> extends
|
|||||||
public abstract byte[] convertTo(final Type type, final Object value);
|
public abstract byte[] convertTo(final Type type, final Object value);
|
||||||
|
|
||||||
public abstract byte[] convertMapTo(final Object... values);
|
public abstract byte[] convertMapTo(final Object... values);
|
||||||
|
|
||||||
|
public abstract byte[] convertTo(BiFunction<Attribute, Object, Object> fieldFunc, final Object value);
|
||||||
|
|
||||||
|
public abstract byte[] convertTo(final Type type, BiFunction<Attribute, Object, Object> fieldFunc, final Object value);
|
||||||
|
|
||||||
|
public abstract byte[] convertMapTo(BiFunction<Attribute, Object, Object> fieldFunc, final Object... values);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ package org.redkale.convert;
|
|||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.*;
|
||||||
|
import org.redkale.util.Attribute;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 序列化/反序列化操作类
|
* 序列化/反序列化操作类
|
||||||
@@ -31,6 +32,11 @@ public abstract class Convert<R extends Reader, W extends Writer> {
|
|||||||
return this.factory;
|
return this.factory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected <S extends W> S funcWrite(S writer, BiFunction<Attribute, Object, Object> fieldFunc) {
|
||||||
|
writer.fieldFunc = fieldFunc;
|
||||||
|
return writer;
|
||||||
|
}
|
||||||
|
|
||||||
public abstract boolean isBinary();
|
public abstract boolean isBinary();
|
||||||
|
|
||||||
public abstract <T> T convertFrom(final Type type, final byte[] bytes);
|
public abstract <T> T convertFrom(final Type type, final byte[] bytes);
|
||||||
@@ -45,4 +51,9 @@ public abstract class Convert<R extends Reader, W extends Writer> {
|
|||||||
|
|
||||||
public abstract ByteBuffer[] convertMapTo(final Supplier<ByteBuffer> supplier, final Object... values);
|
public abstract ByteBuffer[] convertMapTo(final Supplier<ByteBuffer> supplier, final Object... values);
|
||||||
|
|
||||||
|
public abstract ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, BiFunction<Attribute, Object, Object> fieldFunc, final Object value);
|
||||||
|
|
||||||
|
public abstract ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Type type, BiFunction<Attribute, Object, Object> fieldFunc, final Object value);
|
||||||
|
|
||||||
|
public abstract ByteBuffer[] convertMapTo(final Supplier<ByteBuffer> supplier, BiFunction<Attribute, Object, Object> fieldFunc, final Object... values);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,8 @@
|
|||||||
package org.redkale.convert;
|
package org.redkale.convert;
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
import org.redkale.util.Attribute;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文本序列化/反序列化操作类
|
* 文本序列化/反序列化操作类
|
||||||
@@ -33,4 +35,10 @@ public abstract class TextConvert<R extends Reader, W extends Writer> extends Co
|
|||||||
public abstract String convertTo(final Type type, final Object value);
|
public abstract String convertTo(final Type type, final Object value);
|
||||||
|
|
||||||
public abstract String convertMapTo(final Object... values);
|
public abstract String convertMapTo(final Object... values);
|
||||||
|
|
||||||
|
public abstract String convertTo(BiFunction<Attribute, Object, Object> fieldFunc, final Object value);
|
||||||
|
|
||||||
|
public abstract String convertTo(final Type type, BiFunction<Attribute, Object, Object> fieldFunc, final Object value);
|
||||||
|
|
||||||
|
public abstract String convertMapTo(BiFunction<Attribute, Object, Object> fieldFunc, final Object... values);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,8 @@
|
|||||||
package org.redkale.convert;
|
package org.redkale.convert;
|
||||||
|
|
||||||
import java.lang.reflect.*;
|
import java.lang.reflect.*;
|
||||||
import org.redkale.util.StringWrapper;
|
import java.util.function.BiFunction;
|
||||||
|
import org.redkale.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 序列化的数据输出流
|
* 序列化的数据输出流
|
||||||
@@ -24,6 +25,9 @@ public abstract class Writer {
|
|||||||
//convertTo时是否以指定Type的ObjectEncoder进行处理
|
//convertTo时是否以指定Type的ObjectEncoder进行处理
|
||||||
protected Type specify;
|
protected Type specify;
|
||||||
|
|
||||||
|
//对某个字段值进行动态处理
|
||||||
|
protected BiFunction<Attribute, Object, Object> fieldFunc;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置specify
|
* 设置specify
|
||||||
*
|
*
|
||||||
@@ -39,6 +43,11 @@ public abstract class Writer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected boolean recycle() {
|
||||||
|
this.fieldFunc = null;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 返回specify
|
* 返回specify
|
||||||
*
|
*
|
||||||
@@ -106,7 +115,12 @@ public abstract class Writer {
|
|||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public void writeObjectField(final EnMember member, Object obj) {
|
public void writeObjectField(final EnMember member, Object obj) {
|
||||||
Object value = member.attribute.get(obj);
|
Object value;
|
||||||
|
if (fieldFunc == null) {
|
||||||
|
value = member.attribute.get(obj);
|
||||||
|
} else {
|
||||||
|
value = fieldFunc.apply(member.attribute, obj);
|
||||||
|
}
|
||||||
if (value == null) return;
|
if (value == null) return;
|
||||||
if (tiny()) {
|
if (tiny()) {
|
||||||
if (member.istring) {
|
if (member.istring) {
|
||||||
|
|||||||
@@ -131,6 +131,7 @@ public class BsonByteBufferWriter extends BsonWriter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean recycle() {
|
protected boolean recycle() {
|
||||||
|
super.recycle();
|
||||||
this.index = 0;
|
this.index = 0;
|
||||||
this.specify = null;
|
this.specify = null;
|
||||||
this.buffers = null;
|
this.buffers = null;
|
||||||
|
|||||||
@@ -94,6 +94,7 @@ public final class BsonConvert extends BinaryConvert<BsonReader, BsonWriter> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------ convertFrom -----------------------------------------------------------
|
//------------------------------ convertFrom -----------------------------------------------------------
|
||||||
|
@Override
|
||||||
public <T> T convertFrom(final Type type, final byte[] bytes) {
|
public <T> T convertFrom(final Type type, final byte[] bytes) {
|
||||||
if (bytes == null) return null;
|
if (bytes == null) return null;
|
||||||
return convertFrom(type, bytes, 0, bytes.length);
|
return convertFrom(type, bytes, 0, bytes.length);
|
||||||
@@ -141,8 +142,13 @@ public final class BsonConvert extends BinaryConvert<BsonReader, BsonWriter> {
|
|||||||
//------------------------------ convertTo -----------------------------------------------------------
|
//------------------------------ convertTo -----------------------------------------------------------
|
||||||
@Override
|
@Override
|
||||||
public byte[] convertTo(final Object value) {
|
public byte[] convertTo(final Object value) {
|
||||||
|
return convertTo((BiFunction) null, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] convertTo(BiFunction<Attribute, Object, Object> fieldFunc, final Object value) {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
final BsonWriter out = writerPool.get().tiny(tiny);
|
final BsonWriter out = funcWrite(writerPool.get().tiny(tiny), fieldFunc);
|
||||||
out.writeNull();
|
out.writeNull();
|
||||||
byte[] result = out.toArray();
|
byte[] result = out.toArray();
|
||||||
writerPool.accept(out);
|
writerPool.accept(out);
|
||||||
@@ -153,8 +159,13 @@ public final class BsonConvert extends BinaryConvert<BsonReader, BsonWriter> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] convertTo(final Type type, final Object value) {
|
public byte[] convertTo(final Type type, final Object value) {
|
||||||
|
return convertTo(type, (BiFunction) null, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] convertTo(final Type type, BiFunction<Attribute, Object, Object> fieldFunc, final Object value) {
|
||||||
if (type == null) return null;
|
if (type == null) return null;
|
||||||
final BsonWriter out = writerPool.get().tiny(tiny);
|
final BsonWriter out = funcWrite(writerPool.get().tiny(tiny), fieldFunc);
|
||||||
factory.loadEncoder(type).convertTo(out, value);
|
factory.loadEncoder(type).convertTo(out, value);
|
||||||
byte[] result = out.toArray();
|
byte[] result = out.toArray();
|
||||||
writerPool.accept(out);
|
writerPool.accept(out);
|
||||||
@@ -163,8 +174,13 @@ public final class BsonConvert extends BinaryConvert<BsonReader, BsonWriter> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] convertMapTo(final Object... values) {
|
public byte[] convertMapTo(final Object... values) {
|
||||||
|
return convertTo((BiFunction) null, values);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] convertMapTo(BiFunction<Attribute, Object, Object> fieldFunc, final Object... values) {
|
||||||
if (values == null) return null;
|
if (values == null) return null;
|
||||||
final BsonWriter out = writerPool.get().tiny(tiny);
|
final BsonWriter out = funcWrite(writerPool.get().tiny(tiny), fieldFunc);
|
||||||
((AnyEncoder) factory.getAnyEncoder()).convertMapTo(out, values);
|
((AnyEncoder) factory.getAnyEncoder()).convertMapTo(out, values);
|
||||||
byte[] result = out.toArray();
|
byte[] result = out.toArray();
|
||||||
writerPool.accept(out);
|
writerPool.accept(out);
|
||||||
@@ -198,8 +214,13 @@ public final class BsonConvert extends BinaryConvert<BsonReader, BsonWriter> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Object value) {
|
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Object value) {
|
||||||
|
return convertTo(supplier, (BiFunction) null, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, BiFunction<Attribute, Object, Object> fieldFunc, final Object value) {
|
||||||
if (supplier == null) return null;
|
if (supplier == null) return null;
|
||||||
BsonByteBufferWriter out = new BsonByteBufferWriter(tiny, supplier);
|
BsonByteBufferWriter out = funcWrite(new BsonByteBufferWriter(tiny, supplier), fieldFunc);
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
out.writeNull();
|
out.writeNull();
|
||||||
} else {
|
} else {
|
||||||
@@ -210,8 +231,13 @@ public final class BsonConvert extends BinaryConvert<BsonReader, BsonWriter> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Type type, final Object value) {
|
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Type type, final Object value) {
|
||||||
|
return convertTo(supplier, type, (BiFunction) null, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Type type, BiFunction<Attribute, Object, Object> fieldFunc, final Object value) {
|
||||||
if (supplier == null || type == null) return null;
|
if (supplier == null || type == null) return null;
|
||||||
BsonByteBufferWriter out = new BsonByteBufferWriter(tiny, supplier);
|
BsonByteBufferWriter out = funcWrite(new BsonByteBufferWriter(tiny, supplier), fieldFunc);
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
out.writeNull();
|
out.writeNull();
|
||||||
} else {
|
} else {
|
||||||
@@ -222,8 +248,13 @@ public final class BsonConvert extends BinaryConvert<BsonReader, BsonWriter> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ByteBuffer[] convertMapTo(final Supplier<ByteBuffer> supplier, final Object... values) {
|
public ByteBuffer[] convertMapTo(final Supplier<ByteBuffer> supplier, final Object... values) {
|
||||||
|
return convertMapTo(supplier, (BiFunction) null, values);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ByteBuffer[] convertMapTo(final Supplier<ByteBuffer> supplier, BiFunction<Attribute, Object, Object> fieldFunc, final Object... values) {
|
||||||
if (supplier == null) return null;
|
if (supplier == null) return null;
|
||||||
BsonByteBufferWriter out = new BsonByteBufferWriter(tiny, supplier);
|
BsonByteBufferWriter out = funcWrite(new BsonByteBufferWriter(tiny, supplier), fieldFunc);
|
||||||
if (values == null) {
|
if (values == null) {
|
||||||
out.writeNull();
|
out.writeNull();
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -97,7 +97,9 @@ public class BsonWriter extends Writer {
|
|||||||
count += len;
|
count += len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected boolean recycle() {
|
protected boolean recycle() {
|
||||||
|
super.recycle();
|
||||||
this.count = 0;
|
this.count = 0;
|
||||||
this.specify = null;
|
this.specify = null;
|
||||||
if (this.content.length > defaultSize) {
|
if (this.content.length > defaultSize) {
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ public class JsonByteBufferWriter extends JsonWriter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean recycle() {
|
protected boolean recycle() {
|
||||||
|
super.recycle();
|
||||||
this.index = 0;
|
this.index = 0;
|
||||||
this.specify = null;
|
this.specify = null;
|
||||||
this.charset = null;
|
this.charset = null;
|
||||||
|
|||||||
@@ -186,11 +186,22 @@ public final class JsonConvert extends TextConvert<JsonReader, JsonWriter> {
|
|||||||
return convertTo(value.getClass(), value);
|
return convertTo(value.getClass(), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String convertTo(BiFunction<Attribute, Object, Object> fieldFunc, final Object value) {
|
||||||
|
if (value == null) return "null";
|
||||||
|
return convertTo(value.getClass(), fieldFunc, value);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String convertTo(final Type type, final Object value) {
|
public String convertTo(final Type type, final Object value) {
|
||||||
|
return convertTo(type, (BiFunction) null, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String convertTo(final Type type, BiFunction<Attribute, Object, Object> fieldFunc, final Object value) {
|
||||||
if (type == null) return null;
|
if (type == null) return null;
|
||||||
if (value == null) return "null";
|
if (value == null) return "null";
|
||||||
final JsonWriter writer = writerPool.get().tiny(tiny);
|
final JsonWriter writer = funcWrite(writerPool.get().tiny(tiny), fieldFunc);
|
||||||
writer.specify(type);
|
writer.specify(type);
|
||||||
factory.loadEncoder(type).convertTo(writer, value);
|
factory.loadEncoder(type).convertTo(writer, value);
|
||||||
String result = writer.toString();
|
String result = writer.toString();
|
||||||
@@ -201,7 +212,13 @@ public final class JsonConvert extends TextConvert<JsonReader, JsonWriter> {
|
|||||||
@Override
|
@Override
|
||||||
public String convertMapTo(final Object... values) {
|
public String convertMapTo(final Object... values) {
|
||||||
if (values == null) return "null";
|
if (values == null) return "null";
|
||||||
final JsonWriter writer = writerPool.get().tiny(tiny);
|
return convertMapTo((BiFunction) null, values);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String convertMapTo(BiFunction<Attribute, Object, Object> fieldFunc, final Object... values) {
|
||||||
|
if (values == null) return "null";
|
||||||
|
final JsonWriter writer = funcWrite(writerPool.get().tiny(tiny), fieldFunc);
|
||||||
((AnyEncoder) factory.getAnyEncoder()).convertMapTo(writer, values);
|
((AnyEncoder) factory.getAnyEncoder()).convertMapTo(writer, values);
|
||||||
String result = writer.toString();
|
String result = writer.toString();
|
||||||
writerPool.accept(writer);
|
writerPool.accept(writer);
|
||||||
@@ -252,8 +269,13 @@ public final class JsonConvert extends TextConvert<JsonReader, JsonWriter> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Object value) {
|
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Object value) {
|
||||||
|
return convertTo(supplier, (BiFunction) null, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, BiFunction<Attribute, Object, Object> fieldFunc, final Object value) {
|
||||||
if (supplier == null) return null;
|
if (supplier == null) return null;
|
||||||
JsonByteBufferWriter out = new JsonByteBufferWriter(tiny, null, supplier);
|
JsonByteBufferWriter out = funcWrite(new JsonByteBufferWriter(tiny, null, supplier), fieldFunc);
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
out.writeNull();
|
out.writeNull();
|
||||||
} else {
|
} else {
|
||||||
@@ -264,8 +286,13 @@ public final class JsonConvert extends TextConvert<JsonReader, JsonWriter> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Type type, final Object value) {
|
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Type type, final Object value) {
|
||||||
|
return convertTo(supplier, type, (BiFunction) null, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Type type, BiFunction<Attribute, Object, Object> fieldFunc, final Object value) {
|
||||||
if (supplier == null || type == null) return null;
|
if (supplier == null || type == null) return null;
|
||||||
JsonByteBufferWriter out = new JsonByteBufferWriter(tiny, null, supplier);
|
JsonByteBufferWriter out = funcWrite(new JsonByteBufferWriter(tiny, null, supplier), fieldFunc);
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
out.writeNull();
|
out.writeNull();
|
||||||
} else {
|
} else {
|
||||||
@@ -277,8 +304,13 @@ public final class JsonConvert extends TextConvert<JsonReader, JsonWriter> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ByteBuffer[] convertMapTo(final Supplier<ByteBuffer> supplier, final Object... values) {
|
public ByteBuffer[] convertMapTo(final Supplier<ByteBuffer> supplier, final Object... values) {
|
||||||
|
return convertMapTo(supplier, (BiFunction) null, values);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ByteBuffer[] convertMapTo(final Supplier<ByteBuffer> supplier, BiFunction<Attribute, Object, Object> fieldFunc, final Object... values) {
|
||||||
if (supplier == null) return null;
|
if (supplier == null) return null;
|
||||||
JsonByteBufferWriter out = new JsonByteBufferWriter(tiny, null, supplier);
|
JsonByteBufferWriter out = funcWrite(new JsonByteBufferWriter(tiny, null, supplier), fieldFunc);
|
||||||
if (values == null) {
|
if (values == null) {
|
||||||
out.writeNull();
|
out.writeNull();
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -97,7 +97,9 @@ public class JsonWriter extends Writer {
|
|||||||
if (quote) content[count++] = '"';
|
if (quote) content[count++] = '"';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected boolean recycle() {
|
protected boolean recycle() {
|
||||||
|
super.recycle();
|
||||||
this.count = 0;
|
this.count = 0;
|
||||||
this.specify = null;
|
this.specify = null;
|
||||||
if (this.content.length > defaultSize) {
|
if (this.content.length > defaultSize) {
|
||||||
|
|||||||
Reference in New Issue
Block a user