如果可以从服务器获得 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;
将填充来自网络服务器的消息:
message[0] = 'Invalid credentials';
message[1] = 'Invalid username';
message[2] = 'Password match correct';
但是如果网络服务器没有回复任何内容(成功登录),那么我会通过改造得到异常,因为 public List<String> message;
为空时,Web 服务器会回复一条简单的空字符串消息,而不是字符串数组。如果我改变 public List<String> message;
就会起作用至public String message;
,但我不能,因为如果登录失败,它一定是一个字符串数组。
最佳答案
这与改造无关。默认情况下,Gson 用于反序列化 JSON 响应。
由于您的服务器发回不一致的 JSON 结构,因此您应该在 Gson
实例上使用自定义 TypeAdapter
来处理此问题。
创建 Gson
实例(本例中为“gson
”)后,您可以将其传递给 Retrofit,如下所示:
RestAdapter ra = new RestAdapter.Builder()
// ... normal stuff ...
.setConverter(new GsonConverter(gson))
.build();
关于Android改造转换器异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19331803/