首页 文章

Spring Webflux路由器功能未被使用

提问于
浏览
0

我有以下配置

@Configuration
@EnableWebFlux
public class WebfluxConfig {

    @Bean
    RouterFunction<?> routerFunction(UserResource userResource) {
        return route(GET("/user"), r -> ok()
                .body(userResource.findAll(), UserDto.class));
    }
}

当我启动应用程序时,它会产生预期的映射

2018-04-12 12:12:06.682 INFO 54617 --- [main] o.s.w.r.f.s.s.RouterFunctionMapping:Mapped / user - > c.n.a.i.c.WebfluxConfig$$Lambda$764/909878836@14ba7f15

但是,当我尝试连接到它时,我得到了404.并且路由器谓词没有被调用过一次 .

curl -v localhost:8080/user

*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)

> GET /user HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.54.0
> Accept: */*
>

< HTTP/1.1 404
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Thu, 12 Apr 2018 09:15:52 GMT
<

* Connection #0 to host localhost left intact
{"timestamp":"2018-04-12T09:15:52.475+0000","status":404,"error":"Not Found","message":"No message available","path":"/user"}%

这是来自服务器的日志

2018-04-12 12:33:03.950 DEBUG 67056 --- [nio-8080-exec-2] osbwsfOrderedRequestContextFilter:绑定请求上下文到线程:org.apache.catalina.connector.RequestFacade@51160dcb 2018-04-12 12:33:03.950 DEBUG 67056 --- [nio-8080-exec-2] sbaewsWebMvcEndpointHandlerMapping:查找路径/用户的处理程序方法2018-04-12 12:33:03.952 DEBUG 67056 --- [nio-8080- exec-2] sbaewsWebMvcEndpointHandlerMapping:找不到[/ user]的处理程序方法2018-04-12 12:33:03.952 DEBUG 67056 --- [nio-8080-exec-2] aewsControllerEndpointHandlerMapping:查找路径的处理程序方法/ user 2018-04-12 12:33:03.952 DEBUG 67056 --- [nio-8080-exec-2] aewsControllerEndpointHandlerMapping:找不到[/ user]的处理程序方法2018-04-12 12:33:03.952 DEBUG 67056 --- [nio-8080-exec-2] swsmmaRequestMappingHandlerMapping:查找路径/用户的处理程序方法2018-04-12 12:33:03.953 DEBUG 67056 --- [nio-8080-exec-2] swsmmaRequestMappingHandlerMapping :没有找不到[/ user]的处理程序方法2018-04-12 12:33:03.953 DEBUG 67056 --- [nio-8080-exec-2] oswshandler.SimpleUrlHandlerMapping:请求[/ user]的匹配模式是[/] 2018-04-12 12:33:03.953 DEBUG 67056 --- [nio-8080-exec-2] oswshandler.SimpleUrlHandlerMapping:URI请求[/ user]的模板变量是{} 2018-04-12 12:33: 03.953 DEBUG 67056 --- [nio-8080-exec-2] oswshandler.SimpleUrlHandlerMapping:使用处理程序[ResourceHttpRequestHandler [locations = [类路径资源[META-INF / resources /],类路径资源]将[/ user]映射到HandlerExecutionChain [resources /],类路径资源[静态/],类路径资源[public /],ServletContext资源[/]],解析器= [org.springframework.web.servlet.resource.PathResourceResolver@7c4ca87c]]]和1个拦截器2018-04-12 12:33:03.954 DEBUG 67056 --- [nio-8080-exec-2] osweb.servlet.DispatcherServlet:名为'dispatcherServlet'的DispatcherServlet处理[/ user]的GET请求2018-04-12 12:33:03.954 DEBUG 67056 --- [nio-8080-exec-2] sbaewsWebMvcEndpointHandlerMapping:查找路径/用户的处理程序方法2018-04-12 12:33:03.955 DEBUG 67056 --- [nio-8080-exec-2] sbaews WebMvcEndpointHandlerMapping:找不到[/ user]的处理程序方法2018-04-12 12:33:03.955 DEBUG 67056 --- [nio-8080-exec-2] aewsControllerEndpointHandlerMapping:查找路径/用户的处理程序方法2018-04 -12 12:33:03.955 DEBUG 67056 --- [nio-8080-exec-2] aewsControllerEndpointHandlerMapping:没有为[/ user]找到处理程序方法2018-04-12 12:33:03.955 DEBUG 67056 --- [ nio-8080-exec-2] swsmmaRequestMappingHandlerMapping:查找路径/用户的处理程序方法2018-04-12 12:33:03.956 DEBUG 67056 --- [nio-8080-exec-2] swsmmaRequestMappingHandlerMapping:未找到处理程序方法[/ user] 2018-04-12 12:33:03.956 DEBUG 67056 --- [nio-8080-exec-2] oswshandler.SimpleUrlHandlerMapping:请求匹配模式[/ user]是[/] 2018-04 -12 12:33:03.956调试67056 --- [nio-8080-exec-2] oswshandler.SimpleUrlHandlerMapping:URI请求[/ user]的模板变量是{} 2018-04-12 12:33:03.956 DEBUG 67056 --- [nio-8080- exec-2] oswshandler.SimpleUrlHandlerMapping:使用handler [ResourceHttpRequestHandler [locations = [类路径资源[META-INF / resources /],类路径资源[resources /],类路径资源[static /]将[/ user]映射到HandlerExecutionChain ],类路径资源[public /],ServletContext资源[/]],解析器= [org.springframework.web.servlet.resource.PathResourceResolver@7c4ca87c]]]和1拦截器2018-04-12 12:33:03.957 DEBUG 67056 --- [nio-8080-exec-2] osweb.servlet.DispatcherServlet:[/ user]的最后修改值为:-1 2018-04-12 12:33:03.958 DEBUG 67056 --- [nio -8080-exec-2] osweb.servlet.DispatcherServlet:Null ModelAndView返回DispatcherServlet,名称为“dispatcherServlet”:假设HandlerAdapter完成请求处理2018-04-12 12:33:03.958 DEBUG 67056 --- [nio-8080- EXEC-2 ] osweb.servlet.DispatcherServlet:成功完成请求2018-04-12 12:33:03.960 DEBUG 67056 --- [nio-8080-exec-2] osbwsfOrderedRequestContextFilter:清除线程绑定请求上下文:org.apache.catalina .connector.RequestFacade @ 51160dcb 2018-04-12 12:33:03.960 DEBUG 67056 --- [nio-8080-exec-2] osweb.servlet.DispatcherServlet:名为'dispatcherServlet'的DispatcherServlet处理GET请求[/ error ] 2018-04-12 12:33:03.960 DEBUG 67056 --- [nio-8080-exec-2]sbaewsWebMvcEndpointHandlerMapping:查找路径/错误的处理程序方法2018-04-12 12:33:03.961 DEBUG 67056 --- [nio-8080-exec-2] sbaewsWebMvcEndpointHandlerMapping:找不到[/ error] 2018-的处理程序方法04-12 12:33:03.961 DEBUG 67056 --- [nio-8080-exec-2] aewsControllerEndpointHandlerMapping:查找路径/错误的处理程序方法2018-04-12 12:33:03.961 DEBUG 67056 --- [nio -8080-exec-2] aewsControllerEndpointHandlerMapping:找不到[/ error]的处理程序方法2018-04-12 12:33:03.962 DEBUG 67056 --- [nio-8080-exec-2] swsmmaRequestMappingHandlerMapping:查找处理程序路径/错误的方法2018-04-12 12:33:03.962 DEBUG 67056 --- [nio-8080-exec-2] swsmmaRequestMappingHandlerMapping:返回处理程序方法[public org.springframework.http.ResponseEntity> org.springframework.boot .autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)] 2018-04-12 12:33:03.962 DEBUG 67056 --- [nio-8 080-exec-2] osbfsDefaultListableBeanFactory:返回单例bean的缓存实例'basicErrorController'2018-04-12 12:33:03.962 DEBUG 67056 --- [nio-8080-exec-2] osweb.servlet.DispatcherServlet:Last - [/ error]的修改值为:-1 2018-04-12 12:33:03.966 DEBUG 67056 --- [nio-8080-exec-2] oswsmmaHttpEntityMethodProcessor:Written [{timestamp = Thu Apr 12 12:33 :03 EEST 2018,status = 404,error = Not available,无消息可用,path = / user}] as“application / json”使用[org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@1c00d406] 2018- 04-12 12:33:03.966 DEBUG 67056 --- [nio-8080-exec-2] osweb.servlet.DispatcherServlet:Null ModelAndView返回DispatcherServlet,名称为“dispatcherServlet”:假设HandlerAdapter已完成请求处理2018-04-12 12:33:03.966 DEBUG 67056 --- [nio-8080-exec-2] osweb.servlet.DispatcherServlet:已成功完成请求

我在这里做错了什么?

1 回答

  • 0

    看来你正在使用Spring Boot,值得在你的问题中指出这一点(或相应地标记它) .

    看起来你正在使用Spring MVC(或者至少将Spring MVC作为传递依赖);首先,如果您希望使用Spring WebFlux,则应删除该依赖项 .

    此外,由于您正在使用Spring Boot,因此您不应添加 @EnableWebFlux ,因为它表示您希望完全控制WebFlux配置并手动执行Spring Boot .

相关问题