Java Jackson无法解析ISO8601
我们得到了一个带有日期作为一个json属性的HttpResponse,日期的格式为ISO8601(例如2020-03-13T00:00:35.570+0000),但Jackson抛出以下异常:Java Jackson无法解析ISO8601,java,json,spring-boot,jackson,Java,Json,Spring Boot,Jackson,我们得到了一个带有日期作为一个json属性的HttpResponse,日期的格式为ISO8601(例如2020-03-13T00:00:35.570+0000),但Jackson抛出以下异常: java.time.format.DateTimeParseException:无法在索引23处分析文本“2020-03-13T00:00:35.570+0000” 我写了下面的测试(spock),它无法复制。 我需要知道如何解析日期。 谢谢你的帮助 class TestJackson extends S
java.time.format.DateTimeParseException:无法在索引23处分析文本“2020-03-13T00:00:35.570+0000”
我写了下面的测试(spock),它无法复制。
我需要知道如何解析日期。
谢谢你的帮助
class TestJackson extends Specification{
def 'test date format'(){
given:
def jsonString = """{"myDate":"2020-03-13T00:00:35.570+0000"}"""
and:
def objectMapper = new ObjectMapper()
.registerModule(new JavaTimeModule())
.enable(SerializationFeature.INDENT_OUTPUT)
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
when:
def resp = objectMapper.readValue(jsonString, Response)
then:
resp.myDate != null
}
@Data
@NoArgsConstructor
@AllArgsConstructor
static class Response {
ZonedDateTime myDate
}
}
该测试使用以下依赖项:
- 核心:jackson数据绑定:2.10.3
- 数据类型:jackson-datatype-jsr310:2.10.3
- 杰克逊不是这里的问题;如果调用
ZoneDateTime.parse(“2020-03-13T00:00:35.570+0000”)
,也会出现同样的异常。根据,ZonedDateTime
使用DateTimeFormatter.ISO_ZONED_DATE_TIME
进行解析<代码>ISO分区日期时间
带有偏移量和区域的日期时间,例如
“2011-12-03T10:15:30+01:00[欧洲/巴黎]”
您试图解析的值有偏移量,但没有区域,因此需要将其转换为,这将使用DateTimeFormatter.ISO\u offset\u DATE\u TIME
进行解析<代码>日期时间格式。ISO_偏移量_日期_时间
…解析带有偏移量的日期时间,例如“2011-12-03T10:15:30+01:00”
尝试将
ZonedDateTime
更改为OffsetDateTime
。例外来自Java,而不是Jackson。就这样,谢谢:我会写一个更详细的答案,很高兴它成功了!