Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在SpringBoot2中定义默认处理程序_Java_Spring_Spring Boot_Kotlin_Request Mapping - Fatal编程技术网

Java 如何在SpringBoot2中定义默认处理程序

Java 如何在SpringBoot2中定义默认处理程序,java,spring,spring-boot,kotlin,request-mapping,Java,Spring,Spring Boot,Kotlin,Request Mapping,如何定义一个默认处理程序或控制器操作,当没有为给定URL找到其他处理程序时,将调用该处理程序或控制器操作 我尝试使用一个catch-all模式/**(语法为Kotlin): 但是这与Spring自己的处理程序的优先级相匹配,例如,在Spring.mvc.static path模式中配置的静态文件路径不再可用。我需要我的默认处理程序具有最低优先级。您必须添加HandlerMapping的实现,并将其添加到处理程序列表中。您还需要指定处理请求的处理程序的顺序: @Bean public Simple

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

我尝试使用一个catch-all模式
/**
(语法为Kotlin):


但是这与Spring自己的处理程序的优先级相匹配,例如,在
Spring.mvc.static path模式中配置的静态文件路径不再可用。我需要我的默认处理程序具有最低优先级。

您必须添加
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;
}
@Bean
公共simplerlhandlermapping simplerlhandlermapping(){
SimpleUrlHandlerMapping SimpleUrlHandlerMapping
=新的SimpleUrlHandlerMapping();
Map urlMap=newhashmap();
put(“/**”,defaultController());
simplerlhandlermapping.setUrlMap(urlMap);
simpleUrlHandlerMapping.setOrder(1);
返回simplerlhandermapping;
}
这里的
defaultController()
方法返回一个您为给定映射定义的
@Controller
,因此
defaultController
setOrder
方法定义处理程序的优先级(顺序),从0开始。当然,一些默认的
HandlerMapping
也必须定义为
@Bean
。您可以找到有关此类配置的更多信息

编辑@Tobia的一些想法:


您需要删除
@RequestMapping
注释,以便
RequestMappingHandlerMapping
不会拾取控制器,并实现
AbstractController
接口以覆盖
handleRequestInternal()
中的控制器定义。等等,我不确定它是否有效。我使用了
setOrder(Ordered.lower\u priority)
而不是1,但它仍然覆盖资源处理程序。我需要在资源处理程序之后考虑它。我使用Spring Boot,所以有几个默认处理程序。我只需要加上我的。我已经检查了应用程序bean(使用
applicationContext.getBeansOfType(HandlerMapping.class)
,我可以看到我的加载了order=2147483647,这是一个较高的数字(优先级较低)than order=2147483646 resourceHandlerMapping。这是静态文件的默认SimpleUrlHandlerMapping,URL映射为
/static/**
。但每当我调用静态URL时,就会调用我的控制器。我想我知道发生了什么。requestMappingHandlerMapping仍在拾取我的控制器,因为它仍然是作为@RequestMapping注释。但是如果我删除注释,我会得到
javax.servlet.ServletException:handler[…]没有适配器。。。Controller@6da127ce]:DispatcherServlet配置需要包含一个支持此处理程序的HandlerAdapter
,因此我必须删除@RequestMapping,实现AbstractController并覆盖
HandlerRequestInternal()
“旧方法”(Spring和Spring Boot对“控制器”有不同的定义…)现在它成功了。谢谢你的支持。该死,这是一个相当好的工作。老实说,我自己从来没有实现过它,我不知道有这么多。
@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;
}