WebMvcConfigurer接口的常见方法及其用途

在讨论WebMvcConfigurer接口的每个方法时,我们将通过具体的案例来展示如何实现它们,并分析这些配置对spring mvc应用程序的影响。

1. addinterceptors(interceptorregistry registry)

此方法用于注册拦截器,以便在请求处理的不同阶段执行特定操作。
案例: 假设我们需要一个日志拦截器来记录进入控制器的所有请求。

@configuration
public class webconfig implements webmvcconfigurer {
    @override
    public void addinterceptors(interceptorregistry registry) {
    registry.addinterceptor(new logginginterceptor());
}
}

class logginginterceptor implements handlerinterceptor {
    @override
    public boolean prehandle(httprequest request, httpresponse response, object handler) throws exception {
        system.out.println("request url: " + request.getrequesturl());
        return true;
    }
}

在这个例子中,我们创建了一个名为logginginterceptor的拦截器,它会在每个请求被处理之前打印出请求的url。然后,我们在addinterceptors方法中注册了这个拦截器。

2. addviewcontrollers(viewcontrollerregistry registry)

此方法允许你添加简单的控制器,直接将请求映射到视图,而无需完整的控制器逻辑。
案例: 如果我们想为“/error”路径添加一个简单的视图控制器,显示一个错误页面。

@configuration
public class webconfig implements webmvcconfigurer {
    @override
    public void addviewcontrollers(viewcontrollerregistry registry) {
        registry.addcontroller("/error").setviewname("errorpage");
    }
}

在此配置中,任何指向“/error”的请求都会被直接转发到名为“errorpage”的视图,无需通过控制器逻辑。

3. addresourcehandlers(resourcehandlerregistry registry)

此方法用于配置静态资源的处理,如css、js文件等。
案例: 配置资源处理器以服务于“/static”路径下的静态资源。

@configuration
public class webconfig implements webmvcconfigurer {
    @override
    public void addresourcehandlers(resourcehandlerregistry registry) {
        registry.addresourcehandler("/static/**")
        .addresourcelocations("classpath:/static/");
    }
}

这个配置告诉spring mvc,任何以“/static/”开头的请求都应该从类路径下的“/static”目录中提供资源。

4. configuredefaultservlethandling(defaultservlethandlerconfigurer configurer)

此方法用于配置默认的servlet处理,通常用于将请求委托给tomcat或其他servlet容器。
案例: 启用默认的servlet处理,并将“/”路径映射到默认的servlet。

@configuration
public class webconfig implements webmvcconfigurer {
    @override
    public void configuredefaultservlethandling(defaultservlethandlerconfigurer configurer) {
        configurer.enable();
    }
}

通过调用configuredefaultservlethandlingenable()方法,我们可以启用默认的servlet处理,这对于部署在servlet容器中的spring mvc应用程序非常有用。

5. configureviewresolvers(viewresolverregistry registry)

此方法用于配置如何解析视图名称到实际的视图对象。
案例: 配置一个内部资源视图解析器,用于解析tiles布局。

@configuration
public class webconfig implements webmvcconfigurer {
    @bean
    public tilesviewresolver tilesviewresolver() {
        tilesviewresolver resolver = new tilesviewresolver();
        resolver.setviewclass(tilesview.class);
        return resolver;
    }

    @override
    public void configureviewresolvers(viewresolverregistry registry) {
        registry.viewresolver(tilesviewresolver());
    }
}

在这个例子中,我们配置了一个tilesviewresolver,它将视图名称解析为tiles定义的视图。这需要在视图解析器注册表中进行注册。

6. configurecontentnegotiation(contentnegotiationconfigurer configurer)

此方法用于配置内容协商策略,决定客户端和服务器之间通信的最佳格式。
案例: 设置基于请求头的响应格式优先级。

@configuration
public class webconfig implements webmvcconfigurer {
    @override
    public void configurecontentnegotiation(contentnegotiationconfigurer configurer) {
        configurer.favorparameter(true)
        .favorpathextension(false)
        .favorpathextension(true)
        .ignoreacceptheader(false)
        .usejaxesormax(false);
        .defaultcontenttype(mediatype.texthtml);
    }
}

这里我们设置了内容协商的几个参数,优先使用请求参数来决定响应格式,忽略请求头中的accept字段,默认内容类型设置为text/html

7. addcorsmappings(corsregistry registry)

此方法用于配置跨源资源共享(cors),允许不同源的客户端访问你的api。
案例: 允许所有源在任何端口上访问api。

@configuration
public class webconfig implements webmvcconfigurer {
    @override
    public void addcorsmappings(corsregistry registry) {
    registry.addmapping("/**")
    .allowedorigins("*")
    .allowedmethods("*")
    .allowedheaders("*")
    .allowcredentials(true)
    .maxage(3600);
}
}

在这个配置中,我们添加了一个cors映射,允许来自任何源的请求访问我们的api,支持所有http方法、头部信息和cookies,并且这个规则将在客户端缓存3600秒。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨辰李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值