问题
SpringBoot默认是不支持将时间类型转换成LocalDate类型的
java
1 2 3 4 5
| @Data public class Obj { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime time; }
|
kotlin
1 2 3 4 5
| @Data class Obj ( @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") var time:LocalDateTime, )
|
解决方案2:(@JsonSerialize、@JsonDeserialize 自定义序列化器和反序列化器) 不推荐
@JsonSerialize、@JsonDeserialize 可分别指定序列化、反序列化时的格式:
java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class MyLocalDateTimeSerializer extends com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer { public MyLocalDateTimeSerializer() { super(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); } }
public class MyLocalDateTimeDeserializer extends com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer { public MyLocalDateTimeDeserializer() { super(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); } }
@Data public class Obj { @JsonSerialize(using = MyLocalDateTimeSerializer.class) @JsonDeserialize(using = MyLocalDateTimeDeserializer.class) private LocalDateTime time; }
|
kotlin
1 2 3 4 5 6 7 8 9
| class MyLocalDateTimeSerializer : LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
class MyLocalDateTimeDeserializer : LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
class Obj ( @JsonSerialize(using = MyLocalDateTimeSerializer::class) @JsonDeserialize(using = MyLocalDateTimeDeserializer::class) val time: LocalDateTime? = null )
|
解决方案3:(使用 Jackson扩展工具包的JavaTimeModule ) 推荐
使用 jackson-datatype-jsr310 定制化 ObjectMapper
依赖
com.fasterxml.jackson.datatype:jackson-datatype-jsr310
gradle(kotlin)
1
| implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:last-version")
|
gradle(groovy)
1
| implementation group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: 'last-version'
|
maven
1 2 3 4 5
| <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>last-version</version> </dependency>
|
java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| @Configuration public class AppConfig { @Bean public MappingJackson2HttpMessageConverter customJackson2HttpMessageConverter() { MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = ObjectMapper();
objectMapper.registerModule(new JavaTimeModule()); jsonConverter.objectMapper = objectMapper; return jsonConverter; } } ```
### kotlin ```kotlin @Configuration class AppConfig { @Bean fun customJackson2HttpMessageConverter(): MappingJackson2HttpMessageConverter { val jsonConverter = MappingJackson2HttpMessageConverter() val objectMapper = ObjectMapper()
objectMapper.registerModule(JavaTimeModule()) jsonConverter.objectMapper = objectMapper return jsonConverter } }
|