我刚刚开始使用Retrofit2,我使用的API将所有有效的响应包装在一个“Response”对象中,如下所示。我需要告诉Retrofit只解析response中的值,而不实际将它们嵌套在另一个对象中。对于登录代码,我还面临着获取一个字符串的问题,我希望将其转换为实际的时间戳。
{
"status":"success",
"response":{
"token":"test_token",
"expires":"1485217863"
}
}
在上面仅有的两个实际值是:
token
expires
我希望最终得到如下所示的东西。
public class Token {
@SerializedName("token")
String token;
@SerializedName("expires")
Timestamp expires;
public User(String token, String expires ) {
this.token
this.expires = //conversion code omitted.
}
}
你有几个选择。您可以使用自定义序列化/反序列化程序、类型适配器,也可以简单地使用pojos并自己展开结果。
让我从我能想到的最简单的解决方案开始。想象一下你有这些类:
public class ResponseData<T> {
@SerializedName("status")
@Expose
String status;
@SerializedName("response")
@Expose
T response;
public T getResponse() {
return response;
}
// getters and setters and friends
}
public class Token {
@SerializedName("token")
@Expose
String token;
@SerializedName("expires")
@Expose
Timestamp expires;
public Token(String token, String expires) {
this.token = token;
this.expires = expires;
}
}
因此,首先要注意的是@expose
的使用。这是一个很好的拥有,但不是非常必要的。当您有自定义序列化程序时,它会帮助您。
{
"status":"success",
"response":{
// Can be anything
}
}
Gson gson = new GsonBuilder()
.registerTypeAdapter(Token.class, new YourTypeAdapter())
.create();
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
// ....
正如您所看到的,我们将创建的gson与您的类型适配器一起传递给Referfit使用的GSONConverterFactory
。这为使用给定的类型适配器序列化和反序列化token
对象做好了准备。
我认为这种方法的主要缺点是,如果您想要编写一个通用的反序列化程序/Serialiser/TypeAdapter,它会变得非常复杂(假设您不是只有标记
对象)。
我创建了这样一个熊猫系列:
JavaScript是一种动态类型语言,变量是没有类型的,可以随时赋予任意值。但是,数据本身和各种运算是有类型的,因此运算时变量需要转换类型。大多数情况下,这种数据类型转换是自动的,但是有时也需要手动强制转换。 强制转换 Number函数:强制转换成数值 String函数:强制转换成字符串 Boolean函数:强制转换成布尔值 自动转换 自动转换为布尔值 自动转换为字符串 自动转换为数值 小结 加
问题内容: 我有一个样式规则,当它具有 两个类时,我想将其应用于标签。没有JavaScript,有什么方法可以执行此操作吗?换一种说法: 我想申请我的样式规则 仅 如果有两个及类应用。 问题答案: 你是说两节课?“束缚”选择器(它们之间没有空格): 这将选择与所有元素也有。 在您的情况下: 官方文档:CSS2类选择器。 正如 akamike 指出的那样,InternetExplorer6中此方法存
我想通过另一个模板参数来指定模板化函数的返回类型。所有这些都在一个类中。 在头文件中:
问题内容: 我的数据库是Postgres8。我需要将数据类型转换为另一个。这意味着column数据类型之一是并且需要在语句中将其与Postgres一起转换。 当前,我获取字符串值并将其转换为Java语言。 有什么办法吗?示例代码将不胜感激。 问题答案: cast(varchar_col AS int) – SQL standard 要么 这些语法变体在 任何地方 (几乎)都有效。第二种在特殊情况下