android - 尝试使用 Retrofit 在没有正文的情况下进行 POST,但因 GSON 解析异常而失败

标签 android gson retrofit

我正在与 REST API 集成,所以我正在使用 Retrofit。我需要打的网址是:

http://{{server}}/api/v1/stuff/{{id}}/deactivate

我已经创建了一个实现 API 的接口(interface):

@PUT("/api/v1/stuff/{id}/deactivate")
String deactivate(@Path("id") String id);

问题是当我调用方法时失败并显示以下堆栈跟踪:

E/AndroidRuntime( 3046): Caused by: retrofit.converter.ConversionException: com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 15  
E/AndroidRuntime( 3046):        at retrofit.converter.GsonConverter.fromBody(GsonConverter.java:67)    
E/AndroidRuntime( 3046):        at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:393) 
E/AndroidRuntime( 3046):        ... 11 more 
E/AndroidRuntime( 3046): Caused by: com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 15   
E/AndroidRuntime( 3046):        at com.google.gson.Gson.assertFullConsumption(Gson.java:779) 
E/AndroidRuntime( 3046):        at com.google.gson.Gson.fromJson(Gson.java:769)   
E/AndroidRuntime( 3046):  at retrofit.converter.GsonConverter.fromBody(GsonConverter.java:63) 
E/AndroidRuntime( 3046):        ... 12 more 
E/AndroidRuntime( 3046): Caused by: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 15 
E/AndroidRuntime( 3046):        at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1505) 
E/AndroidRuntime( 3046):        at com.google.gson.stream.JsonReader.checkLenient(JsonReader.java:1386) 
E/AndroidRuntime( 3046):        at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:531) 
E/AndroidRuntime( 3046):        at com.google.gson.stream.JsonReader.peek(JsonReader.java:414) 
E/AndroidRuntime( 3046):        at com.google.gson.Gson.assertFullConsumption(Gson.java:775) 
E/AndroidRuntime( 3046):        ... 14 more

我认为这是由于我没有在正文中张贴任何东西造成的。解决此问题的最佳方法是什么?

注意:我已经成功使用POSTMan调用了API。

最佳答案

使用以下方法开启全面调试:

setLogLevel(RestAdapter.LogLevel.FULL)

并发现由于从服务器返回的 JSON 格式不正确而导致 Gson 解析错误。我与服务器人员“交谈”以解决问题。

对不起,空 body 的红鲱鱼放了思想。我想我忘了相关性并不表示因果关系。

关于android - 尝试使用 Retrofit 在没有正文的情况下进行 POST,但因 GSON 解析异常而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21617013/

相关文章:

java - 放大 android - 保持图像可见

android - FragmentManager 在使用方法 setOffscreenPageLimit() 后已经在执行事务

android - 如何在 Retrofit 2 (Android) 中将 JSON OBJECT 作为参数发送

deserialization - 适用于java.util.Date的Gson反序列化器

java - Retrofit 1.9 回调错误

android - 需要改进登录示例的帮助吗?

android - 如何在使用 Android 代码时使用 git 和 repo 工具创建分支

android - 如何在多个 Activity 中使用 Android Nearby Connections

android - 如何在android中无休止地向RecyclerView显示布局

android - 改造 + GSON 解串器