J'essaie d'utiliser org.apache.httpcomponents
pour consommer une API Rest, qui publiera des données au format JSON sur l'API.
J'obtiens cette exception:
Causé par: com.fasterxml.jackson.core.JsonParseException: Caractère illégal sans guillemets ((CTRL-CHAR, code 10)): doit être échappé en utilisant une barre oblique inverse pour être inclus dans la 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 ou une autre?
java
json
character-encoding
apache-httpclient-4.x
jian zhong
la source
la source
Réponses:
Cela peut se produire si vous avez une nouvelle ligne (ou un autre caractère de contrôle) dans un littéral de chaîne JSON.
Si vous êtes celui qui produit les données, remplacez les nouvelles lignes réelles par des échappées
"\\n"
lors de la création de vos chaînes littérales.la source
En utilisant
Voir javadoc :
L'ancienne option
JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS
était obsolète depuis la 2.10.Veuillez également consulter le fil de discussion github .
la source
<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.fasterxml.jackson.databind.ObjectMapper"> <property name="serializationInclusion" value="NON_NULL"/> </bean> </property> <property name="supportedMediaTypes" value="application/json"/> </bean> </mvc:message-converters> </mvc:annotation-driven>
. J'utilise Jackson 2.7. et Spring4.3.2com.fasterxml.jackson.core.JsonParser.Feature;
Sur la plate-forme Salesforce, cette erreur est causée par
/
, la solution consiste à les échapper comme//
.la source
\n
devait être changé en\\n
. Cela est dû au fait que JSON nécessite l'échappement des caractères de contrôle. Voir cet excellent commentaire ici .