2015-10-19 275 views
0

我有使用JacksonConverter和Retrofit-2.0.0-beta2對json響應進行反序列化的問題。當我通過請求時,我得到例外:無法解析響應

10-19 16:14:21.918 31481-31481 /? W/System.err: com.fasterxml.jackson.core.JsonParseException:意外字符 (''(code 65279/0xfeff)):預期有效值(數字,字符串, 數組,對象,'true', 'false'或'null')10-19 16:14:21.918 31481-31481 /? W/System.err:at [來源: [email protected]; line:2,column:2] 10-19 16:14:21.918 31481-31481 /? W/System.err:at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1419) 10-19 16:14:21.918 31481-31481 /? W/System.err:at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:508) 10-19 16:14:21.919 31481-31481 /? W/System.err:at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:437) 10-19 16:14:21.919 31481-31481 /? W/System.err:at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:1462) 10-19 16:14:21.919 31481-31481 /? W/System.err:at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:683) 10-19 16:14:21.919 31481-31481 /? W/System.err:at com.fasterxml.jackson.databind.ObjectReader._initForReading(ObjectReader.java:1346) 10-19 16:14:21.919 31481-31481 /? W/System.err:at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1252) 10-19 16:14:21.919 31481-31481 /? W/System.err:at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:880) 10-19 16:14:21.919 31481-31481 /? W/System.err: retrofit.JacksonResponseBodyConverter.convert(JacksonResponseBodyConverter.java:33) 10-19 16:14:21.919 31481-31481 /? W/System.err: retrofit.JacksonResponseBodyConverter.convert(JacksonResponseBodyConverter.java:23) 10-19 16:14:21.919 31481-31481 /? W/System.err: retrofit.OkHttpCall.parseResponse(OkHttpCall.java:148)10-19 16:14:21.919 31481-31481 /? W/System.err: retrofit.OkHttpCall.access $ 100(OkHttpCall.java:29)10-19 16:14:21.919 31481-31481 /? W/System.err: retrofit.OkHttpCall $ 1.onResponse(OkHttpCall.java:94)10-19 16:14:21.919 31481-31481 /? W/System.err:at com.squareup.okhttp.Call $ AsyncCall.execute(Call.java:168)10-19 16:14:21.919 31481-31481 /? W/System.err:at com.squareup.okhttp.internal.NamedRunnable.run(NamedRunnable.java:33) 10-19 16:14:21.919 31481-31481 /? W/System.err: java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 10-19 16:14:21.919 31481-31481 /? W/System.err: java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587) 10-19 16:14:21.919 31481-31481 /? W/System.err的:在 java.lang.Thread.run(Thread.java:818)

我不能改變響應JSON。德看看我的改造配置:

 sInstance = new RetrofitRequestCreator(); 
     ObjectMapper mapper = new ObjectMapper(); 
     mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); 
     mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false); 
     mapper.configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, true); 
     sInstance.mRetrofit = new Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(
       JacksonConverterFactory.create(mapper)).build(); 

Gradle。build

... 
    compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' 
    compile 'com.squareup.retrofit:converter-jackson:2.0.0-beta2' 
... 

有什麼辦法可以逃避這個角色嗎?謝謝你的回覆

+0

json似乎無效。發表它。 – njzk2

+0

0xfeff是一個零寬度無間斷空間http://www.unicodemap.org/details/0xFEFF/index.html它在json文件的結構中沒有任何關係(它可以在字符串中找到,這不會導致這個問題)。找到誰爲你正在使用的服務編寫json格式化程序並向他們大喊大叫。 – njzk2

+0

感謝您的建議。 Json由wp-api生成https://wordpress.org/plugins/json-rest-api/我認爲有任何方法在解析之前轉義某些字符。謝謝 –

回答

-2

你需要包括所有的依賴關係。

compile 'com.squareup.okhttp:okhttp:2.5.0' 
compile 'com.fasterxml.jackson:jackson-datatype-json-org:1.8.0' 
compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' 
compile 'com.squareup.retrofit:converter-jackson:2.0.0-beta2' 
+0

據我所知retrofit 2.0已內置okhttp –