有没有办法刷新 RequestMappingHandlerMapping?
Is there a way to refresh the RequestMappingHandlerMapping?
我正在开发 Spring 引导应用程序 - 并在 RequestMapping 已经初始化后添加 @RestController bean。
我可以看到新的控制器 bean 在 web 上下文中,但由于它们是在之后添加的,因此当应用程序完成启动时没有映射。
我希望我可以在 RequestMappingHandlerMapping 上调用 "afterPropertiesSet()",但我最终得到了不明确的映射 [我假设调用该方法会重新注册所有具有映射的 bean]
有没有办法注册某些bean,或者刷新RequestMappingHandlerMapping?
Caused by: java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path 'http://localhost:52765/error': {public org.springframework.http.ResponseEntity org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest), public org.springframework.http.ResponseEntity org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)}
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:367) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:314) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:61) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:352) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1160) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:940) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
... 26 common frames omitted
换个方式问 -
我在一个单独的项目中有一个@RestController,它没有被配置项目引用。
我有第三个项目,它引用配置项目和带有@RestController 的'module' 项目。
如何确保在配置RequestMappingHandlerMapping 之前将模块项目中的@RestController 添加到应用程序上下文中?
我创建了一个自定义注释,想也许我可以以某种方式使用它。请在此处查看项目 -
主平台 - https://github.com/savantly-net/sprout-platform/tree/development/
自动配置项目 - https://github.com/savantly-net/sprout-platform/tree/development/spring/sprout-spring-boot-starter
模块项目 - https://github.com/savantly-net/sprout-platform/tree/development/modules/sprout-wiki-module
完整的 Web 项目 - https://github.com/savantly-net/garden/tree/development
如果您构建此项目,您将看到 wiki 模块 bean 添加到应用程序上下文中,但从未映射 @RestController。
有什么想法吗?
我将 Web 应用程序中的模块声明从 @Bean 更改为 @Import,它解决了问题。我假设这提高了模块项目中 bean 的顺序。
之前 -
@SpringBootApplication
public class GardenWebApplication {
public static void main(String[] args) {
SpringApplication.run(GardenWebApplication.class, args);
}
@Bean
public WikiModule wikiModule() {
return new WikiModule();
}
}
之后 -
@SpringBootApplication
@Import(WikiModule.class)
public class GardenWebApplication {
public static void main(String[] args) {
SpringApplication.run(GardenWebApplication.class, args);
}
}
我正在开发 Spring 引导应用程序 - 并在 RequestMapping 已经初始化后添加 @RestController bean。
我可以看到新的控制器 bean 在 web 上下文中,但由于它们是在之后添加的,因此当应用程序完成启动时没有映射。
我希望我可以在 RequestMappingHandlerMapping 上调用 "afterPropertiesSet()",但我最终得到了不明确的映射 [我假设调用该方法会重新注册所有具有映射的 bean]
有没有办法注册某些bean,或者刷新RequestMappingHandlerMapping?
Caused by: java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path 'http://localhost:52765/error': {public org.springframework.http.ResponseEntity org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest), public org.springframework.http.ResponseEntity org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)}
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:367) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:314) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:61) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:352) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1160) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:940) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
... 26 common frames omitted
换个方式问 -
我在一个单独的项目中有一个@RestController,它没有被配置项目引用。
我有第三个项目,它引用配置项目和带有@RestController 的'module' 项目。
如何确保在配置RequestMappingHandlerMapping 之前将模块项目中的@RestController 添加到应用程序上下文中?
我创建了一个自定义注释,想也许我可以以某种方式使用它。请在此处查看项目 -
主平台 - https://github.com/savantly-net/sprout-platform/tree/development/
自动配置项目 - https://github.com/savantly-net/sprout-platform/tree/development/spring/sprout-spring-boot-starter
模块项目 - https://github.com/savantly-net/sprout-platform/tree/development/modules/sprout-wiki-module
完整的 Web 项目 - https://github.com/savantly-net/garden/tree/development
如果您构建此项目,您将看到 wiki 模块 bean 添加到应用程序上下文中,但从未映射 @RestController。
有什么想法吗?
我将 Web 应用程序中的模块声明从 @Bean 更改为 @Import,它解决了问题。我假设这提高了模块项目中 bean 的顺序。
之前 -
@SpringBootApplication
public class GardenWebApplication {
public static void main(String[] args) {
SpringApplication.run(GardenWebApplication.class, args);
}
@Bean
public WikiModule wikiModule() {
return new WikiModule();
}
}
之后 -
@SpringBootApplication
@Import(WikiModule.class)
public class GardenWebApplication {
public static void main(String[] args) {
SpringApplication.run(GardenWebApplication.class, args);
}
}