Java Spring RequestBody无法正确解析datetime时区
我有一个简单的rest服务来存储时间范围,但是Spring无法正确解析带有时区的datetime格式 该实体是Java Spring RequestBody无法正确解析datetime时区,java,spring,datetime,Java,Spring,Datetime,我有一个简单的rest服务来存储时间范围,但是Spring无法正确解析带有时区的datetime格式 该实体是 @Data @Entity public class TimeRange { @Setter(AccessLevel.NONE) @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = true) private LocalDateTime startTim
@Data
@Entity
public class TimeRange {
@Setter(AccessLevel.NONE)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = true)
private LocalDateTime startTime;
@Column(nullable = true)
private LocalDateTime endTime;
}
控制器是:
@PostMapping(path = "/time", consumes = "application/json", produces = "application/json")
public Boolean setTime(@RequestBody TimeRange timeRange) {
timeRangeRepository.save(timeRange);
return true;
}
实际请求是
url = f'http://localhost/api/time'
data = {
"startTime": "2019-12-03T19:58:29.047820+08:00",
"endTime": "2019-12-04T19:58:29.047820+08:00"}
resp = requests.post(url, json=data, timeout=10)
pprint(resp.json())
spring报告了一个错误,它说:
esolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error:
Cannot deserialize value of type `java.time.LocalDateTime` from String "2019-12-
03T19:58:29.047820+08:00“:未能反序列化java.time.LocalDateTime:
(java.time.format.DateTimeParseException)无法找到文本“2019-12-03T19:58:29.047820+08:00”
在索引26处找到已解析、未解析的文本;嵌套异常为
com.fasterxml.jackson.databind.exc.InvalidFormatException:无法反序列化类型的值
java.time.LocalDateTime
来自字符串“2019-12-03T19:58:29.047820+08:00”:未能反序列化
java.time.LocalDateTime:(java.time.format.DateTimeParseException)文本“2019-12-
无法分析03T19:58:29.047820+08:00',在索引26处找到未分析的文本
在处,用以下内容注释LocalDateTime字段:
@JsonSerialize(using = LocalDateTimeSerializer.class)
您有一个带有偏移量的日期,如果所有日期的格式都相同,则可以创建如下自定义反序列化器
public class CustomLocalDateTimeDeserializer extends StdDeserializer<LocalDateTime> {
private static final long serialVersionUID = 1L;
public CustomLocalDateTimeDeserializer () {
this(null);
}
protected CustomLocalDateTimeDeserializer (Class<?> vc) {
super(vc);
}
@Override
public LocalDateTime deserialize(JsonParser arg0, DeserializationContext arg1)
throws IOException, JsonProcessingException {
return LocalDateTime.parse(arg0.getValueAsString(), DateTimeFormatter.ISO_OFFSET_DATE_TIME);
}
}
如果您想用相同的格式序列化日期,您必须创建一个自定义序列化程序这是否回答了您的问题?尝试了jackson-modules-java8,仍然会出现相同的错误,我可能无法在途中获取findAndRegisterModules。这是否回答了您的问题?这是一个重复的问题。请看问题:您是否有意将反序列化为
java.time.LocalDateTime
(丢失区域信息),而不是java.time.ZonedDateTime
?
@JsonDeserialize(using = CustomLocalDateTimeDeserializer.class)
private LocalDateTime startTime;
@JsonDeserialize(using = CustomLocalDateTimeDeserializer.class)
private LocalDateTime endTime;