修复StringWrapper序列化json问题
This commit is contained in:
@@ -10,7 +10,7 @@ import java.nio.charset.Charset;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
import org.redkale.convert.ConvertException;
|
import org.redkale.convert.ConvertException;
|
||||||
import org.redkale.util.Utility;
|
import org.redkale.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 以ByteBuffer为数据载体的JsonWriter
|
* 以ByteBuffer为数据载体的JsonWriter
|
||||||
@@ -787,7 +787,7 @@ public class JsonByteBufferWriter extends JsonWriter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (len == chs.length) {
|
if (len == chs.length) {
|
||||||
writeTo(-1, true, chs, 0, len);
|
writeTo(-1, quote, chs, 0, len);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int expandsize = -1;
|
int expandsize = -1;
|
||||||
@@ -860,6 +860,16 @@ public class JsonByteBufferWriter extends JsonWriter {
|
|||||||
writeTo(expandsize, quote, cs, 0, sb.length());
|
writeTo(expandsize, quote, cs, 0, sb.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeWrapper(StringWrapper wrapper) {
|
||||||
|
if (wrapper == null || wrapper.getValue() == null) {
|
||||||
|
writeNull();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final char[] chs = Utility.charArray(wrapper.getValue());
|
||||||
|
writeTo(-1, false, chs, 0, chs.length);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return Objects.toString(this);
|
return Objects.toString(this);
|
||||||
|
|||||||
@@ -490,6 +490,42 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
|||||||
count = curr;
|
count = curr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeWrapper(StringWrapper wrapper) {
|
||||||
|
if (wrapper == null || wrapper.getValue() == null) {
|
||||||
|
writeNull();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String value = wrapper.getValue();
|
||||||
|
if (Utility.isLatin1(value)) {
|
||||||
|
writeTo(Utility.latin1ByteArray(value));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
byte[] bytes = expand(value.length() * 4 + 2);
|
||||||
|
int curr = count;
|
||||||
|
int len = value.length();
|
||||||
|
for (int i = 0; i < len; i++) {
|
||||||
|
char ch = value.charAt(i);
|
||||||
|
if (ch < 0x80) {
|
||||||
|
bytes[curr++] = (byte) ch;
|
||||||
|
} else if (ch < 0x800) {
|
||||||
|
bytes[curr++] = (byte) (0xc0 | (ch >> 6));
|
||||||
|
bytes[curr++] = (byte) (0x80 | (ch & 0x3f));
|
||||||
|
} else if (Character.isSurrogate(ch)) { //连取两个
|
||||||
|
int uc = Character.toCodePoint(ch, value.charAt(++i));
|
||||||
|
bytes[curr++] = (byte) (0xf0 | ((uc >> 18)));
|
||||||
|
bytes[curr++] = (byte) (0x80 | ((uc >> 12) & 0x3f));
|
||||||
|
bytes[curr++] = (byte) (0x80 | ((uc >> 6) & 0x3f));
|
||||||
|
bytes[curr++] = (byte) (0x80 | (uc & 0x3f));
|
||||||
|
} else {
|
||||||
|
bytes[curr++] = (byte) (0xe0 | ((ch >> 12)));
|
||||||
|
bytes[curr++] = (byte) (0x80 | ((ch >> 6) & 0x3f));
|
||||||
|
bytes[curr++] = (byte) (0x80 | (ch & 0x3f));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
count = curr;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return new String(content, 0, count, StandardCharsets.UTF_8);
|
return new String(content, 0, count, StandardCharsets.UTF_8);
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ package org.redkale.convert.json;
|
|||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import org.redkale.convert.*;
|
import org.redkale.convert.*;
|
||||||
import org.redkale.util.StringWrapper;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -172,11 +171,6 @@ public abstract class JsonWriter extends Writer {
|
|||||||
writeLatin1To(false, String.valueOf(value));
|
writeLatin1To(false, String.valueOf(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public final void writeWrapper(StringWrapper value) {
|
|
||||||
writeString(false, String.valueOf(value));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final boolean needWriteClassName() {
|
public final boolean needWriteClassName() {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user