spring boot 项目重新搭建----------mvc配置:类型转换器

实现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)

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值