2017-10-17 16 views
1

J'ai mon application Spring Boot Web Flux depuis un certain temps. À ce stade, je voulais ajouter des gestionnaires d'exception à ma fonction routeur:Comment définir ViewResolver dans Spring WebFlux

@Bean 
RouterFunction<?> router(final GeneratorHandler generatorHandler) { 
    return resources("/**", new ClassPathResource("/static/")) 
      .andOther(route(GET("/generate"), generatorHandler::renderData) 
        .andRoute(GET("/index"), generatorHandler::renderIndex)); 
} 

J'ajouté un autre bean comme ceci:

@Bean 
HttpHandler httpHandler(final GeneratorHandler generatorHandler) throws Exception { 
    return WebHttpHandlerBuilder.webHandler(toHttpHandler(router(generatorHandler))) 
      .prependExceptionHandler((serverWebExchange, exception) -> { 
       //process here 
       return null; 
      }) 
      .build(); 
} 

Après cela, j'ai des problèmes avec mon résolveur de vue. Il ne peut trouver aucun de mes points de vue. Après avoir étudié, j'ai réalisé que le débogueur ne s'arrête pas dans la classe ThymeleafReactiveViewResolver.

Est-ce possible que cette modification ait également modifié le résolveur par défaut? Comment puis-je le ramener?

+0

Si vous commentez le nouveau haricot 'httpHandler', tout est-il redevenu normal? – dillius

+0

@dillius oui c'est le cas. –

+0

Cette section du document [spring docs] (https://docs.spring.io/spring/docs/5.0.0.M4/spring-framework-reference/html/web-reactive.html#web-reactive-getting- started-manual) donne l'impression que vous devez fournir des informations de contexte au gestionnaire? – dillius

Répondre

1

Si vous fournissez votre httpHandler, le support de Spring Boot est considérablement désactivé.

Vous pouvez déclarer votre propre WebExceptionHandler, en tant que composant (même s'il s'agit d'un composant commandé) et Spring WebFlux le récupèrera pour vous. Sans un exemple plus concret (ou du moins la pile/erreur que vous voyez), il est difficile de comprendre ce qui se passe. Spring Boot prend désormais en charge la gestion des erreurs dans les applications WebFlux (voir #8625), au cas où il ferait ce que vous essayez d'accomplir.