Saya mencoba menggunakan org.apache.httpcomponents
untuk menggunakan Rest API, yang akan memposting data format JSON ke API.
Saya mendapatkan pengecualian ini:
Disebabkan oleh: com.fasterxml.jackson.core.JsonParseException: Illegal unquoted character ((CTRL-CHAR, code 10)): harus di-escape menggunakan garis miring terbalik untuk dimasukkan dalam string.
Alasannya karena ctrl-char
termasuk dalam string JSON.
Apakah ada cara untuk mengganti ini atau solusi lain?
java
json
character-encoding
apache-httpclient-4.x
jian zhong
sumber
sumber
Jawaban:
Ini bisa terjadi jika Anda memiliki baris baru (atau karakter kontrol lain) dalam literal string JSON.
{"foo": "bar baz"}
Jika Anda adalah orang yang menghasilkan data, ganti baris baru yang sebenarnya dengan yang lolos
"\\n"
saat membuat literal string Anda.{"foo": "bar\nbaz"}
sumber
Menggunakan
mapper.configure( JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS.mappedFeature(), true );
Lihat 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. */
Opsi lama
JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS
tidak digunakan lagi sejak 2.10.Silakan lihat juga benang github .
sumber
<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>
. Saya menggunakan Jackson 2.7. dan Spring4.3.2com.fasterxml.jackson.core.JsonParser.Feature;
Pada platform Salesforce, kesalahan ini disebabkan oleh
/
, solusinya adalah menghindari kesalahan ini sebagai//
.sumber
\n
harus diubah menjadi\\n
. Ini karena fakta bahwa JSON memerlukan karakter kontrol untuk di-escape. Lihat komentar luar biasa ini di sini .