Я пытаюсь использовать org.apache.httpcomponents
Rest API, который будет отправлять данные в формате JSON в API.
Я получаю это исключение:
Вызвано: com.fasterxml.jackson.core.JsonParseException: недопустимый символ без кавычек ((CTRL-CHAR, код 10)): для включения в строку необходимо экранировать с помощью обратной косой черты.
Причина в том, что ctrl-char
он включен в строку JSON.
Есть ли способ заменить то или иное решение?
java
json
character-encoding
apache-httpclient-4.x
Цзянь Чжун
источник
источник
Ответы:
Это может произойти, если у вас есть символ новой строки (или другой управляющий символ) в строковом литерале JSON.
{"foo": "bar baz"}
Если вы производите данные, замените фактические символы новой строки на экранированные
"\\n"
при создании строковых литералов.{"foo": "bar\nbaz"}
источник
С помощью
mapper.configure( JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS.mappedFeature(), true );
См. Javadoc :
/** * Feature that determines whether parser will allow * JSON Strings to contain unescaped 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. */
Старый вариант
JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS
устарел с 2.10.См. Также ветку на github .
источник
<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>
. Я использую Jackson 2.7. и Spring4.3.2com.fasterxml.jackson.core.JsonParser.Feature;
На платформе Salesforce эта ошибка вызвана тем
/
, что решение состоит в том, чтобы избежать их как//
.источник
\n
пришлось изменить на\\n
. Это связано с тем, что JSON требует экранирования управляющих символов. Смотрите этот отличный комментарий здесь .