Java 自定义反序列化格式为的日期
[“上次修改”])]有根本原因 java.time.format.DateTimeParseException:无法分析文本“2018-06-06T13:19:53+00:00”,在索引19处找到未分析的文本 入站格式为Java 自定义反序列化格式为的日期,java,jackson,Java,Jackson,[“上次修改”])]有根本原因 java.time.format.DateTimeParseException:无法分析文本“2018-06-06T13:19:53+00:00”,在索引19处找到未分析的文本 入站格式为2018-06-06T13:19:53+00:00 这是一种奇怪的格式 我尝试了以下方法: public class XYZ { @DateTimeFormat(pattern = "yyyy-MM-ddTHH:mm:ss+00:00", iso = ISO.DATE
2018-06-06T13:19:53+00:00
这是一种奇怪的格式 我尝试了以下方法:
public class XYZ {
@DateTimeFormat(pattern = "yyyy-MM-ddTHH:mm:ss+00:00", iso = ISO.DATE_TIME)
private LocalDateTime lastModified;
}
public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
private static final String PATTERN = "yyyy-MM-dd'T'HH:mm:ss+00:00";
private final DateTimeFormatter formatter;
public LocalDateTimeDeserializer() {
this.formatter = DateTimeFormatter.ofPattern(PATTERN);
}
@Override
public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return LocalDateTime.parse(p.getText(), formatter);
}
}
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
objectMapper.setDateFormat(df);
入站格式为2018-06-06T13:19:53+00:00
这是一种奇怪的格式 这是一种格式,由和认可:
当接收作为查询参数的值时,以下各项应按预期工作:
@DateTimeFormat(iso=DateTimeFormat.iso.DATE\u-TIME)
私有LocalDate-dateTime;
由于2018-06-06T13:19:53+00:00
表示与UTC偏移的日期和时间,因此最好使用,而不是:
@DateTimeFormat(iso=DateTimeFormat.iso.DATE\u-TIME)
私人OffsetDateTime日期时间;
只需确保+
编码为%2B
使用Jackson,您可以将
Jackson-datatype-jsr310
依赖项添加到应用程序中。本模块将为您提供和的类型
com.fasterxml.jackson.datatype
您的计算机中的模块:
ObjectMapper mapper=new ObjectMapper();
registerModule(新的JavaTimeModule());
禁用(SerializationFeature.WRITE_DATES_作为时间戳);
Jackson将为您处理序列化和反序列化
如果出于某种原因,您对UTC的偏移量不感兴趣,并且希望继续使用,则可以扩展Jackson提供的,并使用自定义的:
公共类CustomLocalDateTimeDeserializer扩展LocalDateTimeDeserializer{
公共CustomLocalDateTimeDeserializer(){
super(DateTimeFormatter.ISO\u OFFSET\u DATE\u TIME);
}
}
然后对字段进行注释,如下所示:
@JsonDeserialize(使用=CustomLocalDateTimeDeserializer.class)
私有LocalDateTime日期时间;
没有任何东西可以阻止您创建自己的反序列化程序。下面是一个非常简单的例子:
public class XYZ {
@DateTimeFormat(pattern = "yyyy-MM-ddTHH:mm:ss+00:00", iso = ISO.DATE_TIME)
private LocalDateTime lastModified;
}
public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
private static final String PATTERN = "yyyy-MM-dd'T'HH:mm:ss+00:00";
private final DateTimeFormatter formatter;
public LocalDateTimeDeserializer() {
this.formatter = DateTimeFormatter.ofPattern(PATTERN);
}
@Override
public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return LocalDateTime.parse(p.getText(), formatter);
}
}
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
objectMapper.setDateFormat(df);
入站格式为2018-06-06T13:19:53+00:00
如果能够在整个ObjectMapper上设置日期格式,则可以执行以下操作:
public class XYZ {
@DateTimeFormat(pattern = "yyyy-MM-ddTHH:mm:ss+00:00", iso = ISO.DATE_TIME)
private LocalDateTime lastModified;
}
public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
private static final String PATTERN = "yyyy-MM-dd'T'HH:mm:ss+00:00";
private final DateTimeFormatter formatter;
public LocalDateTimeDeserializer() {
this.formatter = DateTimeFormatter.ofPattern(PATTERN);
}
@Override
public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return LocalDateTime.parse(p.getText(), formatter);
}
}
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
objectMapper.setDateFormat(df);
这是中的一部分示例,尝试了一些答案,这一个效果最好。