2017-12-12 4 views
0

Ich arbeite an einer Spring Boot-Anwendung - und @RestController-Beans hinzufügen, nachdem das RequestMapping bereits initialisiert wurde.
Ich kann sehen, die neuen Controller-Beans sind im Web-Kontext, aber da sie nachher hinzugefügt wurden, gibt es keine Zuordnung, wenn die Anwendung beendet wird.Gibt es eine Möglichkeit, das RequestMappingHandlerMapping zu aktualisieren?

Ich hatte gehofft, ich könnte „afterPropertiesSet()“ rufen die RequestMappingHandlerMapping, aber ich am Ende mit mehrdeutigen Zuordnungen bis [I das Verfahren erneut registriert alle Bohnen mit Mappings assume Aufruf]

Gibt es eine Möglichkeit zu registrieren bestimmte Beans, oder aktualisieren Sie die 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 

Fragen eine andere Art und Weise -

ich ein @RestController in einem separaten Projekt, das nicht durch die Konfiguration Projekt verwiesen wird.
Ich habe ein drittes Projekt, das sowohl das Konfigurationsprojekt als auch das 'Modulprojekt' mit dem @RestController referenziert.

Wie stelle ich sicher, dass @RestController im Modulprojekt dem Anwendungskontext hinzugefügt wird, bevor RequestMappingHandlerMapping konfiguriert ist?

Ich habe eine benutzerdefinierte Anmerkung, vielleicht denken sie, ich könnte irgendwie verwenden .. hier die Projekte einsehen -
Hauptplattform - https://github.com/savantly-net/sprout-platform/tree/development/

Automatische Konfiguration Projekt - https://github.com/savantly-net/sprout-platform/tree/development/spring/sprout-spring-boot-starter

Modul Project - https://github.com/savantly-net/sprout-platform/tree/development/modules/sprout-wiki-module

Vollständiges Webprojekt - https://github.com/savantly-net/garden/tree/development

Wenn Sie dieses Projekt erstellen, sehen Sie das Wiki-Modul-Beans werden dem Anwendungskontext hinzugefügt, aber @RestController wird niemals zugeordnet.

Irgendwelche Gedanken?

+1

Dies kann hilfreich https://stackoverflow.com/a/5758529/1527544 – Antoniossss

Antwort

0

Ich habe die Moduldeklaration in der Web-App von einem @Bean zu einem @Import geändert und das Problem wurde behoben. Ich gehe davon aus, dass dies die Reihenfolge der Beans im Modulprojekt erhöht hat.

Vor -

@SpringBootApplication 
public class GardenWebApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(GardenWebApplication.class, args); 
    } 

    @Bean 
    public WikiModule wikiModule() { 
     return new WikiModule(); 
    } 
} 

Nach -

@SpringBootApplication 
@Import(WikiModule.class) 
public class GardenWebApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(GardenWebApplication.class, args); 
    } 
} 
Verwandte Themen