android - Android 中带改造的简单类型 Joda 日期时间

标签 android jackson retrofit2 jodatime

我有一个带有字段的模型:

@JsonDeserialize(as = DateTimeDeserializer.class)
private DateTime expiryTimeFirebaseCustomAccessToken;

使用环境:

compile('com.fasterxml.jackson.datatype:jackson-datatype-joda:2.9.4')
compile('com.squareup.retrofit2:converter-jackson:2.4.0')
compile 'joda-time:joda-time:2.9.9'
compile 'com.squareup.retrofit2:retrofit:2.4.0'

和java代码:

final JodaModule jodaModule = new JodaModule();
        jodaModule.addDeserializer(DateTime.class,
                DateTimeDeserializer.forType(DateTime.class));
        jodaModule.addDeserializer(ReadableDateTime.class,
                DateTimeDeserializer.forType(ReadableDateTime.class));
        jodaModule.addDeserializer(ReadableInstant.class,
                DateTimeDeserializer.forType(ReadableInstant.class));

        final ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(jodaModule);

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(serverAddress)                .addConverterFactory(JacksonConverterFactory.create(objectMapper))
                .build();

和 json 响应:

"expiryTimeFirebaseCustomAccessToken": "2018-03-27T10:44:06.590Z"

但是,我收到了这个错误:

Failed to narrow type [simple type, class org.joda.time.DateTime] with annotation (value com.fasterxml.jackson.datatype.joda.deser.DateTimeDeserializer), from 'setExpiryTimeFirebaseCustomAccessToken': Class com.fasterxml.jackson.datatype.joda.deser.DateTimeDeserializer not subtype of [simple type, class org.joda.time.DateTime

最佳答案

我找到了解决方案:

@JsonDeserialize(using = MyDateTimeDeserializer.class)
    private DateTime expiryTimeFirebaseCustomAccessToken;

与类:

import com.fasterxml.jackson.datatype.joda.cfg.FormatConfig;
import com.fasterxml.jackson.datatype.joda.cfg.JacksonJodaDateFormat;
import com.fasterxml.jackson.datatype.joda.deser.DateTimeDeserializer;

    import org.joda.time.DateTime;

    /**
     * Created by rudi on 3/28/18.
     */

    public class MyDateTimeDeserializer extends DateTimeDeserializer {

        public MyDateTimeDeserializer() {
            super(DateTime.class, FormatConfig.DEFAULT_DATETIME_PARSER);
        }

        public MyDateTimeDeserializer(Class<?> cls, JacksonJodaDateFormat format) {
            super(cls, format);
        }

    }

关于android - Android 中带改造的简单类型 Joda 日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49510334/

相关文章:

java - 泽西通用实体不工作

java - 重复调用将 Retrofit 网络调用排入队列的静态方法是否会相应地维护传递参数的值?

android - Eclipse - 出现错误的字符串

Android 应用程序链接不起作用

java - 带正文的 HTTP 帖子

android - Koin + Retrofit 在运行时添加标题

java - 从 retrofit 查询中获取 map

android - 无法将我的项目迁移到Android API 27

java - Tapestry JPA Jackson 反序列化

java - 什么处理了转换异常?