简单类型Joda日期时间,在Android中进行改装
我有一个带有字段的模型:简单类型Joda日期时间,在Android中进行改装,android,jackson,retrofit2,jodatime,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')
@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"
但是,我有一个错误:
无法使用缩小类型[简单类型,类org.joda.time.DateTime]
注释(值)
com.fasterxml.jackson.datatype.joda.desr.DateTimeDeserializer),来自
“setExpiryTimeFirebaseCustomAccessToken”:类
com.fasterxml.jackson.datatype.joda.desr.DateTimeDeserializer不可用
[简单类型,类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);
}
}
import com.fasterxml.jackson.datatype.joda.cfg.FormatConfig;
导入com.fasterxml.jackson.datatype.joda.cfg.jacksonjodateformat;
导入com.fasterxml.jackson.datatype.joda.desr.DateTimeDeserializer;
导入org.joda.time.DateTime;
/**
*鲁迪于2018年3月28日创作。
*/
公共类MyDateTimeDeserializer扩展了DateTimeDeserializer{
公共MyDateTimeDeserializer(){
super(DateTime.class,FormatConfig.DEFAULT\u DateTime\u解析器);
}
公共MyDateTimeDeserializer(类cls,JacksonJodDateFormat){
超级(cls,格式);
}
}
My bad,我应该使用:@JsonDeserialize(using=DateTimeDeserializer.class)private DateTime expiryTimeFirebaseCustomAccessToken;但是,现在我得到了错误:失败:class com.fasterxml.jackson.datatype.joda.deser.DateTimeDeserializer没有默认(无参数)构造函数