【问题标题】:JAVA StdDateSerializer parsing DateJAVA StdDateSerializer 解析日期
【发布时间】:2017-09-06 13:25:51
【问题描述】:

我有自定义Date 序列化程序来添加特定时区。

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

【问题讨论】:

  • 如果是Jackson,请添加标签

标签: java json date serialization jackson


【解决方案1】:

您可以使用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

【讨论】:

    【解决方案2】:

    如果您的日期是字符串类型,例如像这样的掩码:“yyyy-MM-dd”

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

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

    【讨论】:

    • 这无济于事,因为我没有得到 dateString 值我得到异常说 当前令牌 (VALUE_STRING) 不是数字,不能使用数值访问器 尝试评估 @ 987654322@
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    相关资源
    最近更新 更多