2014-09-12 34 views
-1

我正在使用jackson映射器將json請求直接映射到java對象。要分別在getter和setter中映射我使用CustomDateSerializer和CustomDateDeSerializer的日期。java.text.ParseException:Unparseable date「Fri Sep 12 23:22:46 IST 2014」

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" 

任何一個可以幫助我解決這個..

+2

那麼它顯然不符合那個日期格式... – bcsb1001 2014-09-12 18:04:58

+0

哦,是的,我明白了,「EEE MMM dd HH:mm:ss Z yyyy」這將與它匹配。 – 2014-09-12 18:10:30

回答

2

您定義的格式是:

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

但是它看起來像它期待的格式是不一樣的(週五09月12日23:22 :46 IST 2014)。

它應該是這樣的:

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

檢查Oracle docs for SimpleDateFormat

enter image description here

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); 
0

更改日期格式固定它 - 「EEE MMM DD HH:MM:SSžYYYY」

相關問題