J'essaie d'utiliser org.Apache.httpcomponents
pour consommer une api de repos, qui publiera des données au format JSON sur api.
alors que je fais exception
Causé par: com.fasterxml.jackson.core.JsonParseException: Caractère non mis entre guillemets illégal ((CTRL-CHAR, code 10)): doit être échappé à l'aide d'une barre oblique inversée pour être inclus dans chaîne.
La raison en est que ctrl-char
est inclus dans la chaîne json.
Existe-t-il un moyen de remplacer cette solution?
merci!
Cela peut arriver si vous avez une nouvelle ligne (ou un autre caractère de contrôle) dans un littéral de chaîne JSON.
{"foo": "bar
baz"}
Si vous êtes celui qui produit les données, remplacez les sauts de ligne réels par des caractères d'échappement "\\n"
lors de la création de vos littéraux de chaîne.
{"foo": "bar\nbaz"}
En utilisant
mapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
Voir javadoc :
/**
* Feature that determines whether parser will allow
* JSON Strings to contain unquoted control characters
* (ASCII characters with value less than 32, including
* tab and line feed characters) or not.
* If feature is set false, an exception is thrown if such a
* character is encountered.
*<p>
* Since JSON specification requires quoting for all control characters,
* this is a non-standard feature, and as such disabled by default.
*/
Je vous recommande d'utiliser un éditeur de texte tel que Vim pour rechercher les éventuels caractères spéciaux (invisibles) ou d'échappement à l'origine de ce problème.
Ou si vous utilisez Windows, c'est même simple ... il suffit de copier-coller le code dans le bloc-notes Windows, et il montrera très probablement tous les caractères d'échappement invisibles ou les sauts de ligne, etc., corrigez-les et vous avez terminé!
Sur la plate-forme Salesforce, cette erreur est provoquée par /
, la solution consiste à les échapper en tant que //
.