Spring mvc 之WebMvcConfigurerAdapter 对mvc的自定义

@Configuration
//启用配置
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    /**
     * 注册自定义格式化程序和转换器
     * 详细见Formatter
     *
     * @param registry
     */
    @Override
    public void addFormatters(FormatterRegistry registry) {
//        registry.addFormatter();
        super.addFormatters(registry);
    }

    /**
     * 自定义全局Validator ,当然也可以在本地注册(使用 @InitBinder)
     * 详细见Validator
     *
     * @return
     */
    @Override
    public Validator getValidator() {
        return super.getValidator();
    }

    /**
     * 注册拦截器用用传入的请求
     *
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new ThemeChangeInterceptor())
                .addPathPatterns("/**").excludePathPatterns("/admin/**");
        super.addInterceptors(registry);
    }

    /**
     * 设置跨域限制 和 @CrossOrigin(可用于类以及方法上)的作用一致
     *
     * @param registry
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("api/**")
                .allowedOrigins("http://domain2.com")
                .allowedMethods("PUT", "DELETE")
                .allowedHeaders("header1", "header2", "header3")
                .exposedHeaders("header1", "header2")
                .allowCredentials(false)
                .maxAge(3600);
        super.addCorsMappings(registry);
    }

    /**
     * 自定义请求的内容类型解析
     *
     * @param configurer
     */
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {

        /* 是否通过请求Url的扩展名来决定media type */
        configurer.favorPathExtension(true)
                /* 不检查Accept请求头 */
                .ignoreAcceptHeader(true)
                .parameterName("mediaType")
                /* 设置默认的media yype */
                .defaultContentType(MediaType.TEXT_HTML)
                /* 请求以.html结尾的会被当成MediaType.TEXT_HTML         如 http://localhost:8080/test.html*/
                .mediaType("html", MediaType.TEXT_HTML)
                /* 请求以.json结尾的会被当成MediaType.APPLICATION_JSON  如 http://localhost:8080/test.json*/
                .mediaType("json", MediaType.APPLICATION_JSON);
        super.configureContentNegotiation(configurer);
    }

    /**
     * 自定义消息转换器
     * 重点了解
     *
     * @param converters
     */
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        super.configureMessageConverters(converters);
    }

    /**
     * 配置视图
     * 下面的例子是 将所有"/"请求直接转发给名字为"home"的视图
     *
     * @param registry
     */
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("home");
        super.addViewControllers(registry);
    }

    /**
     * 配置视图解析器的注册
     *
     * @param registry
     */
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.enableContentNegotiation(new MappingJackson2JsonView());
        registry.jsp();
        super.configureViewResolvers(registry);
    }

    /**
     * 从静态资源库位置列表中使用静态资源的快捷方式
     * <p>
     * 示例:给定以/resource开头的请求,相对路径用于在Web应用程序根目录下或在"/public"
     * 下的类路径中和查找和相对于"public"的静态资源,资源的有效期为1年,以确保最大程度使用浏览器缓存
     *
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resource")
                .addResourceLocations("public", "classpath:static/")
                .setCachePeriod(31556926);
        super.addResourceHandlers(registry);
    }

    /**
     * 允许你对许多与URL映射和路径匹配有关的设置进行定制,所有可用的配置选项,
     * 请参考 PathMatchConfigurer API文档
     *
     * @param configurer
     */
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        super.configurePathMatch(configurer);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值