Tôi đã tìm thấy một giải pháp khác mà bạn có thể chuyển đổi nó sang bất kỳ định dạng nào bạn muốn và áp dụng cho tất cả kiểu dữ liệu LocalDateTime và bạn không cần phải chỉ định @JsonFormat phía trên mọi kiểu dữ liệu LocalDateTime. trước tiên hãy thêm phụ thuộc:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
Thêm đậu sau:
@Configuration
public class Java8DateTimeConfiguration {
/**
* Customizing
* http://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html
*
* Defining a @Bean of type Jackson2ObjectMapperBuilder will allow you to customize both default ObjectMapper and XmlMapper (used in MappingJackson2HttpMessageConverter and MappingJackson2XmlHttpMessageConverter respectively).
*/
@Bean
public Module jsonMapperJava8DateTimeModule() {
val bean = new SimpleModule();
bean.addDeserializer (ZonedDateTime.class, new JsonDeserializer<ZonedDateTime>() {
@Override
public ZonedDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
return ZonedDateTime.parse(jsonParser.getValueAsString(), DateTimeFormatter.ISO_ZONED_DATE_TIME);
}
});
bean.addDeserializer(LocalDateTime.class, new JsonDeserializer<LocalDateTime>() {
@Override
public LocalDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
return LocalDateTime.parse(jsonParser.getValueAsString(), DateTimeFormatter.ISO_LOCAL_DATE_TIME);
}
});
bean.addSerializer(ZonedDateTime.class, new JsonSerializer<ZonedDateTime>() {
@Override
public void serialize(
ZonedDateTime zonedDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
throws IOException {
jsonGenerator.writeString(DateTimeFormatter.ISO_ZONED_DATE_TIME.format(zonedDateTime));
}
});
bean.addSerializer(LocalDateTime.class, new JsonSerializer<LocalDateTime>() {
@Override
public void serialize(
LocalDateTime localDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
throws IOException {
jsonGenerator.writeString(DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(localDateTime));
}
});
return bean;
}
}
trong tệp cấu hình của bạn, hãy thêm phần sau:
@Import(Java8DateTimeConfiguration.class)
Điều này sẽ tuần tự hóa và hủy tuần tự hóa tất cả các thuộc tính LocalDateTime và ZonedDateTime miễn là bạn đang sử dụng objectMapper được tạo bởi spring.
Định dạng mà bạn nhận được cho ZonedDateTime là: "2017-12-27T08: 55: 17.317 + 02: 00 [Asia / Jerusalem]" cho LocalDateTime là: "2017-12-27T09: 05: 30.523"
@JsonSerialize(using = LocalDateTimeSerializer.class)
...