Spring接口接收参数转换器

前端向后端转换的类BootConverters

webMvc

1
2
3
4
5
6
7
8
9
10

@Component
public class BootWebMvcConfigurer implements WebMvcConfigurer {

@Override
public void addFormatters(FormatterRegistry registry) {
/*常用类型转换(前端传过来的转换之后使用)*/
BootConverters.getConverterToRegister().forEach(registry::addConverter);
}
}
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

/**
* 数据传输的格式转换
*
* @author maxzhao
* @date 2020-03-05 14:14
*/
public class BootConverters {
/**
* 当前 JDK8+ 才有 java。time 包
* <p>兼容JDK8以下</p>
*/
private static final boolean JAVA_8_IS_PRESENT = ClassUtils.isPresent("java.time.LocalDateTime",
Jsr310Converters.class.getClassLoader());

public static Collection<Converter<?, ?>> getConverterToRegister() {
if (!JAVA_8_IS_PRESENT) {
return Collections.emptySet();
}
List<Converter<?, ?>> converters = new ArrayList<>();
/*LocalDate 格式转换*/
converters.add(LocalDateConverter.INSTANCE);
/*LocalDateTime 格式转换*/
converters.add(LocalDateTimeConverter.INSTANCE);
/*String 格式转换*/
converters.add(StringConverter.INSTANCE);
return converters;
}

/**
* LocalDate 格式转换
* 这里枚举通过 INSTANCE 可以直接创建对象
*/
enum LocalDateConverter implements Converter<String, LocalDate> {
INSTANCE;

@Override
public LocalDate convert(String oldValue) {
if (oldValue.isEmpty()) {
return null;
} else if (Pattern.matches(DateBootUtil.DEFAULT_DATE_REGEX, oldValue)) {
return LocalDate.parse(oldValue, DateTimeFormatter.ofPattern(DateBootUtil.DEFAULT_DATE_FORMAT));
} else if (Pattern.matches(DateBootUtil.DEFAULT_DATETIME_FORMAT, oldValue)) {
return LocalDateTime.parse(oldValue, DateTimeFormatter.ofPattern(DateBootUtil.DEFAULT_DATETIME_FORMAT))
.toLocalDate();
} else {
return null;
}
}
}

enum LocalDateTimeConverter implements Converter<String, LocalDateTime> {
INSTANCE;

@Override
public LocalDateTime convert(String oldValue) {
if (oldValue.isEmpty()) {
return null;
} else if (Pattern.matches(DateBootUtil.DEFAULT_DATETIME_REGEX, oldValue)) {
return LocalDateTime.parse(oldValue, DateTimeFormatter.ofPattern(DateBootUtil.DEFAULT_DATETIME_FORMAT));
} else if (Pattern.matches(DateBootUtil.DEFAULT_DATE_REGEX, oldValue)) {
return LocalDate.parse(oldValue, DateTimeFormatter.ofPattern(DateBootUtil.DEFAULT_DATE_FORMAT)).atStartOfDay();
} else {
return null;
}
}
}

enum StringConverter implements Converter<String, String> {
INSTANCE;

@Override
public String convert(String oldValue) {
if (oldValue.isEmpty()) {
return null;
} else if ("undefined".equals(oldValue)) {
return null;
} else {
return oldValue;
}
}
}
}

本文地址: https://github.com/maxzhao-it/blog/post/6a411b93/