# java8时间的序列化与反序列化
# 启动类调整
@SpringBootApplication
public class ElasticApplication {
@Autowired
private ObjectMapper objectMapper;
public static void main(String[] args) {
SpringApplication.run(ElasticApplication.class, args);
}
@PostConstruct
public void justifyTimeModule() {
objectMapper.registerModule(new JavaTimeModule());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 重写spring的Formatter
package com.htring.demo.elastic.config;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.format.Formatter;
import java.text.ParseException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
/**
* <p>Title: JacksonConfig</p>
* <p>Description: Jackson在springboot项目中是通过JacksonAutoConfiguration自动配置的,
* 我们需要在jackson自动配置之前把设置的java8的序列化器和反序列化器配置进去。</p>
*
* @author hu-ting
* @version v1.0.0
* @date 2020/12/8 14:05
*/
//@Configuration
//@ConditionalOnClass(ObjectMapper.class)
//@AutoConfigureBefore(JacksonAutoConfiguration.class)
public class JacksonConfig {
public static final String DEFAULT_DATE_TIME_FORMATTER = "yyyy-MM-dd HH:mm:ss";
public static final String DEFAULT_DATE_FORMATTER = "yyyy-MM-dd";
public static final String DEFAULT_TIME_FORMATTER = "HH:mm:ss";
// @Bean
public Jackson2ObjectMapperBuilderCustomizer myCustom() {
return builder -> builder
.deserializerByType(
LocalDateTime.class,
new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMATTER)))
.serializerByType(
LocalDateTime.class,
new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMATTER)));
}
// @Bean
public Formatter<LocalDateTime> localDateTimeFormatter() {
return new Formatter<LocalDateTime>() {
@Override
public LocalDateTime parse(String text, Locale locale) throws ParseException {
return LocalDateTime.parse(text, DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMATTER));
}
@Override
public String print(LocalDateTime object, Locale locale) {
return object.format(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMATTER));
}
};
}
// @Bean
public Formatter<LocalDate> localDateFormatter() {
return new Formatter<LocalDate>() {
@Override
public LocalDate parse(String text, Locale locale) throws ParseException {
return LocalDate.parse(text, DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMATTER));
}
@Override
public String print(LocalDate object, Locale locale) {
return object.format(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMATTER));
}
};
}
// @Bean
public Formatter<LocalTime> localTimeFormatter() {
return new Formatter<LocalTime>() {
@Override
public LocalTime parse(String text, Locale locale) throws ParseException {
return LocalTime.parse(text, DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMATTER));
}
@Override
public String print(LocalTime object, Locale locale) {
return object.format(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMATTER));
}
};
}
}
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87