0

我正在使用杰克逊映射器将 json 请求直接映射到 java 对象。为了映射日期,我分别在 getter 和 setter 中使用 CustomDateSerializer 和 CustomDateDeSerializer。

public class CustomJsonDateSerializer extends JsonSerializer<Date> {
    @Override
    public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
        String dateString = simpleDateFormat.format(date);
        jsonGenerator.writeString(dateString);
    }
}


public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {
    @Override
    public Date deserialize(JsonParser jsonparser,
                            DeserializationContext deserializationcontext) throws IOException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
        String date = jsonparser.getText();
        try {
            return format.parse(date);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }
}

我在模型中的 getter 和 setter

@JsonSerialize(using=CustomJsonDateSerializer.class)
    public Date getBirthDate() {
        return birthDate;
    }
@JsonDeserialize(using = CustomJsonDateDeserializer.class)
public void setBirthDate(Date birthDate) {
    this.birthDate = birthDate;
}

例外:

Could not read JSON: java.text.ParseException: Unparseable date: "Fri Sep 12 23:22:46 IST 2014" 

任何人都可以帮我解决这个问题..

4

3 回答 3

2

您定义的格式是:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

但是,看起来它期望的格式不一样(Fri Sep 12 23:22:46 IST 2014)。

它应该是这样的:

SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd hh:mm:ss Z yyyy",Locale.ENGLISH);

检查Oracle 文档的 SimpleDateFormat

在此处输入图像描述

于 2014-09-12T18:10:57.030 回答
1

改变

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

SimpleDateFormat dF=new SimpleDateFormat("EEE MMM dd hh:mm:ss z yyyy",Locale.ENGLISH);
于 2014-09-12T18:10:42.813 回答
0

更改日期格式修复了它 - “EEE MMM dd HH:mm:ss Z yyyy”

于 2014-09-12T18:11:18.927 回答