cvd*_*vdr 5 java jackson spring-boot
我有一个带有 @JsonFormat 的 LocalDateTime 字段
@JsonFormat(pattern = "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'")
private LocalDateTime dateTime;
Run Code Online (Sandbox Code Playgroud)
当 Jackson 尝试解析像2018-11-28T15:24:00.000Z这样的日期时,会抛出异常
com.fasterxml.jackson.databind.JsonMappingException:无法构造 java.time.LocalDateTime 的实例:没有字符串参数构造函数/工厂方法来从字符串值反序列化('2018-11-28T15:24:00.000Z')
在我的 pom.xml 中我有:
我的 ObjectMapper Bean:
@Bean
public ObjectMapper postConstruct() {
return this.builder
.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.defaultUseWrapper(false)
.build();
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
@JsonFormat(pattern = "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'", timezone ="UTC")
private LocalDateTime dateTime;
Run Code Online (Sandbox Code Playgroud)
我也遇到过类似的问题。出现此问题的原因是映射器无法从 String 对象创建 LocalDateTime 实例。下面就解决你的问题。
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonFormat(pattern = "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'")
private LocalDateTime dateTime;
Run Code Online (Sandbox Code Playgroud)
如果您不想明确提及 Serializer/Deseralizer,则必须按照 Jackson 发布 DateTime Java 8 增强功能的指南执行以下任一操作。
ObjectMapper mapper = new ObjectMapper()
.registerModule(new ParameterNamesModule())
.registerModule(new Jdk8Module())
.registerModule(new JavaTimeModule());
Run Code Online (Sandbox Code Playgroud)
或者
ObjectMapper mapper = new ObjectMapper();
mapper.findAndRegisterModules();
Run Code Online (Sandbox Code Playgroud)
在 SpringBoot 中,ObjectMapper 实例是 AutoWired,因此我不知道我们是否可以明确执行任一解决方案。因此,就目前而言,明确提及序列化器/反序列化器的脏解决方案是我最好的选择。
JackSon Java8 LocalDateTime 增强 ReadMe 页面如下
https://github.com/FasterXML/jackson-modules-java8/blob/master/README.md
| 归档时间: |
|
| 查看次数: |
16048 次 |
| 最近记录: |