代码之家  ›  专栏  ›  技术社区  ›  Tobia

如何在spring boot 2中定义默认处理程序

  •  0
  • Tobia  · 技术社区  · 5 年前

    如何定义一个默认处理程序或控制器操作,当没有为给定的url找到其他处理程序时,该操作将被调用?

    我试着用通吃的方式 /** (语法为kotlin):

    @Controller
    class DefaultController {
    
        @RequestMapping("/**")
        fun default(...) {
            ...
        }
    }
    

    但这与 Spring自己的处理程序的优先级更高, 例如,在 spring.mvc.static-path-pattern 不再可用。我需要我的默认处理程序具有最低的优先级。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Andronicus    5 年前

    您必须添加 HandlerMapping 并将其添加到处理程序列表中。您还需要指定处理请求的处理程序的顺序:

    @Bean
    public SimpleUrlHandlerMapping simpleUrlHandlerMapping() {
        SimpleUrlHandlerMapping simpleUrlHandlerMapping
          = new SimpleUrlHandlerMapping();
        Map<String, Object> urlMap = new HashMap<>();
        urlMap.put("/**", defaultController());
        simpleUrlHandlerMapping.setUrlMap(urlMap);
        simpleUrlHandlerMapping.setOrder(1);
        return simpleUrlHandlerMapping;
    }
    

    这里 defaultController() 方法返回 @Controller ,您已经为给定映射定义了,所以 DefaultController . 这个 setOrder 方法定义处理程序的优先级(顺序),从0开始。当然有些违约 handler映射 必须定义为 @Bean 也。关于这种配置的更多信息,您可以找到 here .

    用@tobia的一些想法编辑:

    你需要移除 @RequestMapping 注释,以便控制器不被 RequestMappingHandlerMapping 并实施 AbstractController 用于重写中控制器定义的接口 handleRequestInternal() .

    推荐文章