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

Reactive Spring不支持ServerHttpRequest作为RESTendpoint测试中的参数?

贝杜吟
2023-03-14

这个问题和这个问题很相似。除了我使用的事实:

    null

代码:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SecurityTests.SecurityTestsApplication.class)
@TestPropertySource(properties = {""})
@AutoConfigureWebTestClient
public class SecurityTests {
        @Test 
        public void myTest() { 
            //send request to myUrl and got 500 
        }
}

@RestController
@RequestMapping("/myPath")
public class MyController {
    @PostMapping
    public Mono<Void> myMethod(ServerHttpRequest request) {
        return Mono.empty()
    }

}

例外情况是:

java.lang.IllegalStateException: Failed to resolve argument 1 of type 'org.springframework.http.server.ServerHttpRequest' on public reactor.core.publisher.Mono<java.lang.Void> MyController$MockitoMock$606550817.myMethod(org.springframework.http.server.ServerHttpRequest)
        at org.springframework.web.reactive.result.method.InvocableHandlerMethod.getArgumentError(InvocableHandlerMethod.java:228) ~[spring-webflux-5.0.7.RELEASE.jar:5.0.7.RELEASE]
        at org.springframework.web.reactive.result.method.InvocableHandlerMethod.resolveArg(InvocableHandlerMethod.java:223) ~[spring-webflux-5.0.7.RELEASE.jar:5.0.7.RELEASE]
        at org.springframework.web.reactive.result.method.InvocableHandlerMethod.lambda$null$1(InvocableHandlerMethod.java:179) ~[spring-webflux-5.0.7.RELEASE.jar:5.0.7.RELEASE]
        at java.util.Optional.orElseGet(Optional.java:267) ~[na:1.8.0_131]
        at org.springframework.web.reactive.result.method.InvocableHandlerMethod.lambda$resolveArguments$2(InvocableHandlerMethod.java:177) ~[spring-webflux-5.0.7.RELEASE.jar:5.0.7.RELEASE]
        at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[na:1.8.0_131]
        at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:1.8.0_131]
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_131]
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_131]
        at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) ~[na:1.8.0_131]
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_131]
        at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) ~[na:1.8.0_131]
        at org.springframework.web.reactive.result.method.InvocableHandlerMethod.resolveArguments(InvocableHandlerMethod.java:183) ~[spring-webflux-5.0.7.RELEASE.jar:5.0.7.RELEASE]
        ...
Caused by: java.lang.IllegalStateException: No primary or default constructor found for interface org.springframework.http.server.ServerHttpRequest
    at org.springframework.web.reactive.result.method.annotation.ModelAttributeMethodArgumentResolver.createAttribute(ModelAttributeMethodArgumentResolver.java:213) ~[spring-webflux-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.web.reactive.result.method.annotation.ModelAttributeMethodArgumentResolver.prepareAttributeMono(ModelAttributeMethodArgumentResolver.java:163) ~[spring-webflux-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.web.reactive.result.method.annotation.ModelAttributeMethodArgumentResolver.resolveArgument(ModelAttributeMethodArgumentResolver.java:117) ~[spring-webflux-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.web.reactive.result.method.InvocableHandlerMethod.resolveArg(InvocableHandlerMethod.java:214) ~[spring-webflux-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    ... 227 common frames omitted
Caused by: java.lang.NoSuchMethodException: org.springframework.http.server.ServerHttpRequest.<init>()
    at java.lang.Class.getConstructor0(Class.java:3082) ~[na:1.8.0_131]
    at java.lang.Class.getDeclaredConstructor(Class.java:2178) ~[na:1.8.0_131]
    at org.springframework.web.reactive.result.method.annotation.ModelAttributeMethodArgumentResolver.createAttribute(ModelAttributeMethodArgumentResolver.java:210) ~[spring-webflux-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    ... 230 common frames omitted

共有1个答案

慕嘉运
2023-03-14

导入了错误的类:

  • org.springframework.http.server.serverHttpRequest适用于Spring MVC
  • org.springframework.http.server.reactive.serverHttpRequest用于Spring WebFlux
 类似资料:
  • 使用接口。现在得到: java.lang.IllegalStateException:方法上[javax.servlet.http.HttpServletRequest]类型的参数[0]没有解析器(rest相同)

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

  • 我正在使用ServerHttpRequest作为Rest控制器中的请求参数。但是在响应中,我得到的错误是“no primary or default constructor for interface org.springframework.http.server.reactive.serverHttpRequest”。 我发现了一个类似的问题,但没有运气。 Rest控制器 日志 pom.xml

  • 我正在使用ASP.NET 5 如果我将其中一个命令模型名称更改为不同的名称,那么Swagger就可以工作了。然而,我相信这个嵌套类模型名称是合法的,也应该与swagger一起使用。如果有办法解决这个问题。谢谢

  • 你可以为特定 variant 运行 lint,例如 ./gradlew lintRelease,或为所有 variants 运行(./gradlew lint),这种情况下会生成一份包含特定版本存在的问题的详细报告。你可以像下面的代码片段那样通过配置 lintOptions 节点来配置 lint。一般只能配置小部分选项,查看 DSL reference 了解所有可修改的选项。 android {

  • 5.5 Lint支持 从0.7.0版本之后,你可以为一个特定的变种版本运行 lint ,也可以为所有变种版本都运行.在这种情况下,它会产生一个报告指出给定的变种版本的问题. 你可以像下面一样通过 lintOptions 自定义 lint .一般情况下,你只需要配置其中的一部分.以下是展示所有可用的 lint 配置项. android { lintOptions { // s