2017-09-06 111 views
1

我有自定義Date序列化器來添加一定的時區。JAVA StdDateSerializer解析日期

public class DateDeserializer extends StdDeserializer<Date> { 

    public DateDeserializer() { 
     this(null); 
    } 

    protected DateDeserializer(Class<?> vc) { 
     super(vc); 
    } 

    @Override 
    public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { 
     Long dateString = jsonParser.getLongValue(); 
     Date date = new Date(dateString); 
     changeTimeZone(date); 
     return date; 
    } 
} 

但有時日期並不是long的值。有時會出現String,例如"2017-01-01"和方法jsonParser.getLongValue()失敗。

有什麼方法可以知道jsonParser正在持有什麼樣的價值?因爲如果我檢查jsonParser instanceof Stringlong它總是會返回false

+1

如果這是傑克遜,請將其添加爲標記,請 – DPM

回答

2

您可以使用getCurrentToken() method與比較在JsonToken values

switch (jsonParser.getCurrentToken()) { 
    case VALUE_STRING: 
     // get String value 
     break; 

    case VALUE_NUMBER_INT: 
     // get int or long value 
     break; 
     // and so on 
} 

或者使用if

if (jsonParser.getCurrentToken() == JsonToken.VALUE_STRING) { 
    // get String value 
} else if (jsonParser.getCurrentToken() == JsonToken.VALUE_NUMBER_INT) { 
    // get long value 
} 
... etc 
0

如果你的日期是例如這樣的面具字符串類型:「YYYY-MM-DD」

,你可以在你的反序列化方法使用:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
Date date = sdf.parse(dateString); 
+1

它不會幫助,因爲我沒有得到dateString值我得到異常說_Current token(VALUE_STRING)不是數字,不能使用數值訪問器_當試圖評估'jsonParser.getLongValue();' –