2 votes

Comment définir un gestionnaire par défaut dans Spring Boot 2

Comment puis-je définir un gestionnaire par défaut, ou une action de contrôleur, qui sera invoqué lorsqu'aucun autre gestionnaire n'est trouvé pour une URL donnée ?

J'ai essayé d'utiliser un modèle fourre-tout /** (la syntaxe est Kotlin) :

@Controller
class DefaultController {

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

Mais cela va de pair avec une priorité supérieure à celle des gestionnaires de Spring, par exemple le chemin du fichier statique configuré dans spring.mvc.static-path-pattern n'est plus disponible. J'ai besoin que mon gestionnaire par défaut ait la priorité la plus basse.

3voto

Andronicus Points 9662

Vous devrez ajouter votre implémentation de HandlerMapping et l'ajouter à la liste des gestionnaires. Vous devez également spécifier l'ordre des gestionnaires qui prennent en charge la demande :

@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;
}

Ici, le defaultController() renvoie un @Controller que vous avez défini pour le mappage donné, donc DefaultController . Le site setOrder définit la priorité (l'ordre) des gestionnaires, en commençant par 0. Bien sûr, certaines valeurs par défaut de la méthode HandlerMapping doit être défini comme un @Bean également. Pour en savoir plus sur cette configuration, vous pouvez consulter ici .

Editer avec quelques pensées de @Tobia :

Vous devez retirer le @RequestMapping de manière à ce que le contrôleur ne soit pas récupéré par RequestMappingHandlerMapping et mettre en œuvre le AbstractController pour remplacer la définition du contrôleur dans handleRequestInternal() .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X