实现WebMvcConfigurer接口:
1.configurePathMatch路径配置:
- setUseSuffixPatternMatch : 设置是否是后缀模式匹配,如“/user”是否匹配/user.*,默认为true
- setUseTrailingSlashMatch : 设置是否自动后缀路径模式匹配,如“/user”是否匹配“/user/”,默认为true.
2.configureContentNegotiation 内容协商配置
用于实现一个请求路径返回多种数据格式
configurer.useJaf(false).favorPathExtension(false).favorParameter(true)
.parameterName(“mediaType”).ignoreAcceptHeader(true).defaultContentType(MediaType.APPLICATION_JSON);
设置不使用jaf,不使用路径上的信息来指定,使用url上的参数来指定返回的内容形式,参数名mediaType,忽略HttpHeader上的Accept参数,设置默认的数据返回类型是JSON。如果需要返回其他类型则在请求url上加参数 ?mediaType=xml
3.configureAsyncSupport 异步请求配置
可配置超时时间,延迟结果拦截器,回调拦截器
4.configureDefaultServletHandling 默认配置静态资源servlet处理
configurer.enable()相当于开启根目录下的文件能被访问(DispathcerServlet映射的路径是:/ 拦截所有请求不能访问根目录)
5.addFormatters添加类型转换
创建一个bean工具类(用于获取继承或实现某个类的集合)
@Override
public void addFormatters(FormatterRegistry registry) {
for (Converter<?, ?> converter : BeanKit.getListOfType(Converter.class)) {
registry.addConverter(converter);
}
for (GenericConverter converter : BeanKit.getListOfType(GenericConverter.class)) {
registry.addConverter(converter);
}
for (Formatter<?> formatter : BeanKit.getListOfType(Formatter.class)) {
registry.addFormatter(formatter);
}
}
注册期中添加所有自定义的转换类
自己再来实现一个转换器如:string->localdate
@Component
public class StringToLocalDateConverter implements GenericConverter {
private static final int YEAR_MONTH_LENGTH=7;
private static final int LOCAL_DATE_LENGTH=10;
@Override
public Set<ConvertiblePair> getConvertibleTypes() {
Set<ConvertiblePair> pairs = new HashSet<>();
pairs.add(new ConvertiblePair(String.class, LocalDate.class));
pairs.add(new ConvertiblePair(String.class, YearMonth.class));
return pairs;
}
@Override
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
//2018-11-11 2018-11
if (sourceType.getType() == String.class) {
String time = (String) source;
try {
if (time.length() == YEAR_MONTH_LENGTH) {
return YearMonth.parse(time);
}
if (time.length() == LOCAL_DATE_LENGTH) {
return LocalDate.parse(time);
}
} catch (Exception e) {
throw new IllegalArgumentException("字符串类型不匹配",e);
}
}
return source;
}
}类型转换的接受类要是没有无参构造,可能会报错(解决:1.用实体类来接受 2.@RequestParam(required = false)LocalDate time)