Estou tentando usar org.apache.httpcomponents
para consumir uma API Rest, que postará dados no formato JSON na API.
Eu recebo esta exceção:
Causado por: com.fasterxml.jackson.core.JsonParseException: Caractere ilegal não cotado ((CTRL-CHAR, código 10)): deve ser escapado usando barra invertida para ser incluído na string.
O motivo é porque ctrl-char
está incluído na string JSON.
Existe alguma maneira de substituir esta ou alguma outra solução?
java
json
character-encoding
apache-httpclient-4.x
jian zhong
fonte
fonte
Respostas:
Isso pode acontecer se você tiver uma nova linha (ou outro caractere de controle) em um literal de string JSON.
Se for você quem está produzindo os dados, substitua as novas linhas reais por aquelas com escape
"\\n"
ao criar seus literais de string.fonte
Usando
Veja javadoc :
A opção antiga
JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS
foi descontinuada desde 2.10.Consulte também o tópico do github .
fonte
<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>
. Estou usando o Jackson 2.7. e Spring4.3.2com.fasterxml.jackson.core.JsonParser.Feature;
Na plataforma Salesforce, esse erro é causado por
/
, a solução é evitá-los como//
.fonte
\n
teve que ser alterado para\\n
. Isso se deve ao fato de que JSON requer que os caracteres de controle tenham escape. Veja este excelente comentário aqui .