Jackson-反序列化不同的日期格式

cbeh67ev  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(154)

我正在使用JsonDeserializer来格式化我的日期如下:

public class CustomDateMappingDeserialize extends JsonDeserializer<Date>{

    @Override
    public Date deserialize(JsonParser paramJsonParser, DeserializationContext paramDeserializationContext) throws IOException, JsonProcessingException {
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            String date = paramJsonParser.getText();
            try {
                Date formattedDate= format.parse(date);
              return formattedDate;
            } catch (ParseException e) {
                throw new RuntimeException(e);
            }

    }

}

但问题是我必须定义这里固定的格式并且我有许多不同的日期格式。
我们能不能这样做:

@JsonDeserialize(using = CustomDateMappingDeserialize.class, format ="yyy-dd-mm")
public void setDate(Date date) {
    this.date = date;
}

而不是在自定义类中定义它?
任何帮助/指示都将受到高度赞赏。

sqxo8psd

sqxo8psd1#

对于以前类似性质的需求,我使用了多解析器选项,如本文所述。
下面的自定义类是一个类似的示例

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;

public class CustomDeserializer extends JsonDeserializer<Date> {
    private static final String[] DATE_FORMATS = new String[] { "MMM dd, yyyy HH:mm:ss", "MMM dd, yyyy" };

    @Override
    public Date deserialize(JsonParser paramJsonParser, DeserializationContext paramDeserializationContext)
            throws IOException, JsonProcessingException {
        // TODO Auto-generated method stub
        if (paramJsonParser == null || "".equals(paramJsonParser.getText()))
            return null;
        String date = paramJsonParser.getText();

        for (String format : DATE_FORMATS) {
            try {
                return new SimpleDateFormat(format, Locale.US).parse(date);
            } catch (ParseException e) {
            }
        }
        return null;
    }
}

编辑:
您还可以使用MultiDateTimeParsers,按照此处的建议使用其他库。

相关问题