java - Spring 控制器不支持 ServerHttpRequest
问题描述
我在我的 Rest Controller 中使用 ServerHttpRequest 作为请求参数。但在响应中,我收到错误消息“没有为接口 org.springframework.http.server.reactive.ServerHttpRequest 找到主要或默认构造函数”。
我发现了一个类似的问题,但没有运气。
休息控制器
@GetMapping(路径 = "/**") 公共 Mono <ResponseEntity< String>> clientRequests(ServerHttpRequest request) { Mono<ResponseEntity<String>> jsonOp = restServices.getApiResponse(); 返回 jsonOp; }
日志
严重:servlet [dispatcherServlet] 的 Servlet.service() 在路径 [] 的上下文中抛出异常 [请求处理失败;嵌套异常是 java.lang.IllegalStateException: No primary or default constructor found for interface org.springframework.http.server.reactive.ServerHttpRequest] 根本原因 java.lang.NoSuchMethodException: org.springframework.http.server.reactive.ServerHttpRequest.() 在 java.lang.Class.getConstructor0(Class.java:3082) 在 java.lang.Class.getDeclaredConstructor(Class.java:2178) 在 org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:216) 在 org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:84) 在 org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:139) 在 org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:126) 在 org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:166) 在 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134) 在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) 在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) 在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:634) 在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
Pom.xml
<依赖项> <依赖> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> <version>${spring-boot.version}</version> <排除> <排除> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </排除> </排除> </依赖> <依赖> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${spring-boot.version}</version> <排除> <排除> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </排除> </排除> </依赖> <依赖> <groupId>io.projectreactor.netty</groupId> <artifactId>reactor-netty</artifactId> <version>${reactor-netty.version}</version> </依赖> </依赖>
版本:
<spring-boot.version>2.1.4.RELEASE</spring-boot.version> <reactor-netty.version>0.8.6.RELEASE</reactor-netty.version>
解决方案
正如 WebFlux 上的Spring Boot 参考文档中所解释的,添加 web 和 webflux 启动器意味着 Spring Boot 将自动配置 Spring MVC 应用程序。
在这种情况下无法解析此参数类型,因为 Spring MVC 应用程序无法解析此请求类型。
推荐阅读
- javascript - 使用 EmberJS 和 Oauth2,失效后如何修改默认路由?
- python - PyPDF 读取文件夹中的每个 PDF
- javascript - 如何修改外部 JS 文件中的元素?
- zapier - 如何正确处理 Zapier 身份验证失败?
- javascript - 如何在 Bootstrap 中制作超过 3 张图像的轮播?
- python - 使用python在XML字符串中动态添加值
- sorting - Flutter/Dart 中的随机排序列表定义错误
- python-3.x - 使用事件查看器查找程序崩溃的原因 - Windows 10
- c - C语言中如何使用指针
- javascript - Emscripten - 有没有办法限制写入标准输出?