2017-09-06 74 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();' –