2
傑克遜定製逃逸對象映射器返回錯誤的輸出字符串長度超過2000字符大使用自定義逃逸傑克遜對象映射器有限制的字段長度
我使用傑克遜逃脫一些特殊字符(<,>,」 「)從數據。我輸入地圖的<Object,Object>
。除了這個特殊的輸入中的字符串長度大於2000個字符的大型IT工作正常。
下面就是我使用傑克遜的主要功能。
Map<Object,Object> specialMap = new HashMap<>();
specialMap.put("id", "482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863,482863");
String result = null;
ObjectMapper objectMapper = new ObjectMapper();
try {
//Escaping Special Characters
objectMapper.getJsonFactory().setCharacterEscapes(new XMLCharacterEscapes());
result = objectMapper.writeValueAsString(specialMap);
} catch (IOException e) {
e.printStackTrace();
}
這裏Result
變量應包含字符串逃過值。但是對於這個特定的輸入(specialMap
)它給出了未預期\
和\0
字符序列。
XMLCharacterEscapes類
public class XMLCharacterEscapes extends CharacterEscapes {
private final int[] asciiEscapes;
public XMLCharacterEscapes()
{
// start with set of characters known to require escaping (double-quote, backslash etc)
int[] esc = CharacterEscapes.standardAsciiEscapesForJSON();
// Five chars are predefined in XML and require escaping
esc['<'] = CharacterEscapes.ESCAPE_CUSTOM;
esc['>'] = CharacterEscapes.ESCAPE_CUSTOM;
esc['&'] = CharacterEscapes.ESCAPE_CUSTOM;
esc['\''] = CharacterEscapes.ESCAPE_CUSTOM;
esc['\"'] = CharacterEscapes.ESCAPE_CUSTOM;
asciiEscapes = esc;
}
// this method gets called for character codes 0 - 127
@Override public int[] getEscapeCodesForAscii() {
return asciiEscapes;
}
// and this for others; we don't need anything special here
@Override public SerializableString getEscapeSequence(int ch) {
return new EscapedSerializableString(ch);
}
}
EscapedSerializableString類
public class EscapedSerializableString implements SerializableString {
private final String stringValue;
public EscapedSerializableString(int i) {
stringValue = Character.toString((char) i);
}
@Override
public String getValue() {
return StringEscapeUtils.escapeXml11(stringValue);
}
@Override
public int charLength() {
return stringValue.length();
}
@Override
public char[] asQuotedChars() {
return new char[0];
}
@Override
public byte[] asUnquotedUTF8() {
return new byte[0];
}
@Override
public byte[] asQuotedUTF8() {
return new byte[0];
}
}
嗨馬克,看起來像我用的是傑克遜的舊版本和字符轉義。現在問題解決了。 –