如果您可以从服务器获得2个不同的响应请求,如何格式化/设计您的课程?
注意:如果JSON响应格式(设计)与您的类不同,则Retrofit将抛出异常。 JSON响应中的所有字段都必须出现在您的班级中。
Java类,如JSON响应:
public class RequestResponseLogin
{
public ResponseLogin status;
public class ResponseLogin
{
public boolean success;
public List<String> message;
}
}
JSON响应:
{
"status" : {
"success" : false
"message" : {
"Invalid credientials",
"....",
"...."
}
}
}
这是我请求回复的方式:
interface iLogin
{
@GET
RequestResponseLogin loginUser(@Query("user") String user, @Query("pass") String pass);
}
// ....
RequestResponseLogin response = data.loginUser("admin", "abc123");
如果登录失败,则public List<String> message;
将填充来自Web服务器的消息:
message[0] = 'Invalid credentials';
message[1] = 'Invalid username';
message[2] = 'Password match correct';
但是如果Web服务器没有回复任何内容(成功登录),那么我通过改造获得异常,因为public List<String> message;
为空,Web服务器回复了一个简单的空字符串消息而不是字符串数组。如果我将public List<String> message;
更改为public String message;
,它会起作用,但我不能,因为如果登录失败,它必须是一个字符串数组。
答案 0 :(得分:2)
这与Retrofit无关。 Gson默认用于反序列化JSON响应。
由于您的服务器发回不一致的JSON结构,您应该使用TypeAdapter
实例上的自定义Gson
来处理此问题。
创建Gson
实例(在此示例中为“gson
”)后,您可以将其传递给Retrofit,如下所示:
RestAdapter ra = new RestAdapter.Builder()
// ... normal stuff ...
.setConverter(new GsonConverter(gson))
.build();