当前位置: 首页 > 知识库问答 >
问题:

spring控制器不支持ServerHttpRequest

翁翰
2023-03-14

我正在使用ServerHttpRequest作为Rest控制器中的请求参数。但是在响应中,我得到的错误是“no primary or default constructor for interface org.springframework.http.server.reactive.serverHttpRequest”。

我发现了一个类似的问题,但没有运气。

Rest控制器

@GetMapping(path = "/**")
public Mono &ltResponseEntity< String>> clientRequests(ServerHttpRequest request) {
    Mono&ltResponseEntity&ltString>> jsonOp =  restServices.getApiResponse();
    return jsonOp;
}

日志


SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: No primary or default constructor found for interface org.springframework.http.server.reactive.ServerHttpRequest] with root cause
java.lang.NoSuchMethodException: org.springframework.http.server.reactive.ServerHttpRequest.()
    at java.lang.Class.getConstructor0(Class.java:3082)
    at java.lang.Class.getDeclaredConstructor(Class.java:2178)
    at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:216)
    at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:84)
    at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:139)
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:126)
    at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:166)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

    

pom.xml


&ltdependencies>
        &ltdependency>
            &ltgroupId&gtorg.springframework.boot</groupId>
            &ltartifactId&gtspring-boot-starter-webflux</artifactId>
            &ltversion>${spring-boot.version}</version>
            &ltexclusions>
                &ltexclusion>
                    &ltgroupId&gtorg.springframework.boot</groupId>
                    &ltartifactId&gtspring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        &ltdependency>
            &ltgroupId&gtorg.springframework.boot</groupId>
            &ltartifactId&gtspring-boot-starter-web</artifactId>
            &ltversion>${spring-boot.version}</version>
            &ltexclusions>
                &ltexclusion>
                    &ltgroupId&gtorg.springframework.boot</groupId>
                    &ltartifactId&gtspring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        &ltdependency>
            &ltgroupId&gtio.projectreactor.netty</groupId>
            &ltartifactId&gtreactor-netty</artifactId>
            &ltversion>${reactor-netty.version}</version>
        </dependency>
    </dependencies>

版本:


    &ltspring-boot.version&gt2.1.4.RELEASE</spring-boot.version>
    &ltreactor-netty.version&gt0.8.6.RELEASE</reactor-netty.version>

共有1个答案

红砚文
2023-03-14

正如spring boot关于WebFlux的参考文档中所解释的,添加web和WebFlux启动程序意味着spring boot将自动配置一个spring MVC应用程序

在这种情况下无法解析此参数类型,因为spring MVC应用程序无法解析此请求类型。

 类似资料:
  • 我有以下代码 现在,当我去http://localhost:8080/recipe/2/update,点击提交,我调用@PostMap方法,更新后重定向我到 但是我在控制台上发现了这个错误 这个在网上 当我将@PostMap更改为@Request estMap或添加额外的@GetMaap时,一切正常 有人能解释一下吗?或者我该怎么做才能让@PostMapping按预期工作。 更新:如下面的评论所述

  • Spring靴2.1。打包为war的0/1应用程序不支持将作为Rest控制器中的输入参数,例如: 日志: 我有一个可以快速测试的示例项目:https://github.com/codependent/demo-webflux-springfox 在Tomcat上启动并浏览:http://localhost:8080/demo2_webflux_war/v2/api-文件 被调用的控制器是:: 您能

  • Gson提供@Since注释来控制基于其各种版本的类的Json序列化/反序列化。 考虑以下具有版本控制支持的类。 在这个类中,我们最初定义了两个变量rollNo和name以及稍后,我们添加了verified为新变量。 使用@Since,我们已经定义了版本1.0的rollNo和name ,并验证了版本1.1。 class Student { @Since(1.0) private i

  • 我有以下控制器代码: 问题:在Swagger中为SpecificController生成open api标记时,响应中的客户端模型是BaseClientModel,而不是SpecificClientModel,并且只有id字段,而没有id名称。 实际: 预期: 如果我有40个特定的控制器,有没有办法让springdoc开放api根据特定的通用参数生成正确的标记?

  • 我正在编写一个RESTendpoint,它需要同时支持application/x-www-form-urlencoded和application/json作为请求体。我做了以下配置, 虽然它单独支持application/x-www-form-urlencoded或application/json(当我从consumes={}中注释掉一种内容类型时),但它不同时支持这两种类型。有什么想法吗?