【发布时间】:2015-09-02 20:33:19
【问题描述】:
我有一个 WCF 服务,它向 Android 应用程序返回一个对象列表。其中一个属性是 DateTime 属性。返回格式是 JSON,我在 Android 端以这种格式 /Date(1441117247253+0200)/ 获取日期。我正在使用 com.squareup.retrofit:retrofit:1.9.0 从我的服务中获取数据。
我不知道如何使用 Retrofit 将字符串日期创建到 Date 对象中。我在“自定义转换器”部分下查看了这个http://square.github.io/retrofit/,但不知道如何更进一步。这是我尝试过的,但我不知道如何实现转换器类。
像这样创建 restAdapter:
restAdapter = new RestAdapter.Builder()
.setConverter(new DotNetDateConverter())
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint(API).build();
还有我不知道如何进一步实现的 DotNetDateConverter 类:
public class DotNetDateConverter implements Converter
{
@Override
public Object fromBody(TypedInput body, Type type) throws ConversionException
{
return null;
}
@Override
public TypedOutput toBody(Object object)
{
return null;
}
}
响应中有其他字段很好,但是如何将/Date(1441117247253+0200)/ 更改为正确的 java.util.Date 对象?如果没有转换器,我得到com.google.gson.JsonSyntaxException:/Date(1441117247253+0200)/ 显然是因为字符串不能转换为日期。
任何帮助将不胜感激。
【问题讨论】:
-
一种选择是在 WCF 端将属性数据类型从 DateTime 更改为 String 类型并将值转换为字符串(即:转换为短日期使用 dateTimeProperty.ToString("d")) .并且您的服务操作响应应具有正确的 JSON 数据格式,例如“9/2/2015”。
-
是的,我考虑过这一点,但随后我将更改我的服务以适应一种客户类型。如果您明白我的意思,客户应该真正适应服务。
-
在服务上创建两个对象,一个返回 DateTime,另一个返回客户端特定的 DateTime
dateTimeProperty.ToString("client-supported-format")。否则,当您已经可以控制该服务时,您是否要在 javascript 中编写一个低级别的 DateTime 转换器来支持该服务?我不会那样做的。