如何在 Spring Boot 2 中定义默认处理程序
How to define a default handler in Spring Boot 2
我如何定义一个默认处理程序或控制器操作,当没有为给定的 URL 找到其他处理程序时将调用它?
我尝试使用包罗万象的模式 /**
(语法是 Kotlin):
@Controller
class DefaultController {
@RequestMapping("/**")
fun default(...) {
...
}
}
但这与 比 Spring 自己的处理程序更高的优先级相匹配, 例如 spring.mvc.static-path-pattern
中配置的静态文件路径不再可用.我需要我的默认处理程序具有最低优先级。
您必须添加 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()
方法 returns 和 @Controller
,因此 DefaultController
。 setOrder
方法定义了处理程序的优先级(顺序),从 0 开始。当然一些默认的 HandlerMapping
也必须定义为 @Bean
。有关此类配置的更多信息,您可以找到 here.
根据@Tobia 的一些想法进行编辑:
你需要删除@RequestMapping
注解,这样控制器就不会被RequestMappingHandlerMapping
拾取,并实现AbstractController
接口来覆盖[=21=中控制器的定义].
我如何定义一个默认处理程序或控制器操作,当没有为给定的 URL 找到其他处理程序时将调用它?
我尝试使用包罗万象的模式 /**
(语法是 Kotlin):
@Controller
class DefaultController {
@RequestMapping("/**")
fun default(...) {
...
}
}
但这与 比 Spring 自己的处理程序更高的优先级相匹配, 例如 spring.mvc.static-path-pattern
中配置的静态文件路径不再可用.我需要我的默认处理程序具有最低优先级。
您必须添加 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()
方法 returns 和 @Controller
,因此 DefaultController
。 setOrder
方法定义了处理程序的优先级(顺序),从 0 开始。当然一些默认的 HandlerMapping
也必须定义为 @Bean
。有关此类配置的更多信息,您可以找到 here.
根据@Tobia 的一些想法进行编辑:
你需要删除@RequestMapping
注解,这样控制器就不会被RequestMappingHandlerMapping
拾取,并实现AbstractController
接口来覆盖[=21=中控制器的定义].