2017-09-06 2 views
1

특정 표준 시간대를 추가하기 위해 Date serializer가 있습니다.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 String 또는 long을 확인하면 항상 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

날짜 문자열 값을 얻지 못해 도움이되지 않습니다. _Current 토큰 (VALUE_STRING)은 숫자가 아니며 숫자 값을 사용할 수 없습니다. 'jsonParser.getLongValue();'를 평가하십시오. –