|
| 1 | +package org.apache.hertzbeat.common.config; |
| 2 | + |
| 3 | +import java.text.SimpleDateFormat; |
| 4 | +import java.time.LocalDate; |
| 5 | +import java.time.LocalDateTime; |
| 6 | +import java.time.LocalTime; |
| 7 | +import java.time.OffsetDateTime; |
| 8 | +import java.time.OffsetTime; |
| 9 | +import java.time.ZonedDateTime; |
| 10 | +import java.time.format.DateTimeFormatter; |
| 11 | +import java.util.List; |
| 12 | +import java.util.TimeZone; |
| 13 | + |
| 14 | +import com.fasterxml.jackson.annotation.JsonAutoDetect; |
| 15 | +import com.fasterxml.jackson.annotation.PropertyAccessor; |
| 16 | +import com.fasterxml.jackson.databind.ObjectMapper; |
| 17 | +import com.fasterxml.jackson.databind.SerializationFeature; |
| 18 | +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; |
| 19 | +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; |
| 20 | +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; |
| 21 | +import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; |
| 22 | +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; |
| 23 | +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; |
| 24 | +import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; |
| 25 | + |
| 26 | +import org.springframework.beans.factory.annotation.Autowired; |
| 27 | +import org.springframework.context.annotation.Configuration; |
| 28 | +import org.springframework.data.web.config.SpringDataJacksonConfiguration; |
| 29 | +import org.springframework.http.converter.HttpMessageConverter; |
| 30 | +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; |
| 31 | +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; |
| 32 | + |
| 33 | +/** |
| 34 | + * @author yuluo |
| 35 | + * @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a> |
| 36 | + */ |
| 37 | + |
| 38 | +@Configuration |
| 39 | +public class MVCConfig implements WebMvcConfigurer { |
| 40 | + |
| 41 | + /** 默认日期时间格式 */ |
| 42 | + public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss"; |
| 43 | + /** 默认日期格式 */ |
| 44 | + public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; |
| 45 | + /** 默认时间格式 */ |
| 46 | + public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss"; |
| 47 | + |
| 48 | + @Autowired |
| 49 | + private SpringDataJacksonConfiguration.PageModule pageModule; |
| 50 | + |
| 51 | + @Override |
| 52 | + public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { |
| 53 | + |
| 54 | + MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter(); |
| 55 | + |
| 56 | + ObjectMapper objectMapper = new ObjectMapper(); |
| 57 | + objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); |
| 58 | + objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); |
| 59 | + |
| 60 | + final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT); |
| 61 | + simpleDateFormat.setTimeZone(TimeZone.getDefault()); |
| 62 | + |
| 63 | + JavaTimeModule javaTimeModule = new JavaTimeModule(); |
| 64 | + |
| 65 | + DateTimeFormatter defaultDateTimeFormatter = DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT); |
| 66 | + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT); |
| 67 | + DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT); |
| 68 | + |
| 69 | + javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(defaultDateTimeFormatter)); |
| 70 | + javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(dateTimeFormatter)); |
| 71 | + javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(timeFormatter)); |
| 72 | + |
| 73 | + javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(dateTimeFormatter)); |
| 74 | + javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(dateTimeFormatter)); |
| 75 | + javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(timeFormatter)); |
| 76 | + |
| 77 | + objectMapper.registerModule(javaTimeModule) |
| 78 | + .registerModule(pageModule) |
| 79 | + .setDateFormat(simpleDateFormat); |
| 80 | + |
| 81 | + messageConverter.setObjectMapper(objectMapper); |
| 82 | + converters.add(0, messageConverter); |
| 83 | + } |
| 84 | +} |
0 commit comments