简体   繁体   English

Spring rest 文档无法使用 WebTestClient 记录路径参数

[英]Spring rest docs failing to document pathParameters using WebTestClient

After upgrading to Spring-test-5.3.0-SNAPSHOT, spring rest docs is failing to document path parameters complaining it can't find urlTemplate .升级到 Spring-test-5.3.0-SNAPSHOT 后,spring rest 文档无法记录路径参数,抱怨找不到urlTemplate

webTestClient.mutateWith(csrf()).get()
        .uri("/products/{productId}", productId)
        .accept(MediaType.APPLICATION_JSON)
        .exchange()
        .expectStatus().isOk()
        .expectHeader().contentType(MediaType.APPLICATION_JSON)
        .expectBody()
        .consumeWith(document("find-product-by-id",
                pathParameters(
                        parameterWithName("productId").description("...")
                ),
                responseFields(getProductResponseFields())));

Error log:错误日志:

urlTemplate not found. If you are using MockMvc did you use RestDocumentationRequestBuilders to build the request?
java.lang.IllegalArgumentException: urlTemplate not found. If you are using MockMvc did you use RestDocumentationRequestBuilders to build the request?
    at org.springframework.util.Assert.notNull(Assert.java:201)
    at org.springframework.restdocs.request.PathParametersSnippet.extractUrlTemplate(PathParametersSnippet.java:126)
    at org.springframework.restdocs.request.PathParametersSnippet.extractActualParameters(PathParametersSnippet.java:113)
    at org.springframework.restdocs.request.AbstractParametersSnippet.verifyParameterDescriptors(AbstractParametersSnippet.java:89)
    at org.springframework.restdocs.request.AbstractParametersSnippet.createModel(AbstractParametersSnippet.java:74)
    at org.springframework.restdocs.request.PathParametersSnippet.createModel(PathParametersSnippet.java:98)
    at org.springframework.restdocs.snippet.TemplatedSnippet.document(TemplatedSnippet.java:78)
    at org.springframework.restdocs.generate.RestDocumentationGenerator.handle(RestDocumentationGenerator.java:191)
    at org.springframework.restdocs.webtestclient.WebTestClientRestDocumentation.lambda$document$0(WebTestClientRestDocumentation.java:77)
    at org.springframework.test.web.reactive.server.DefaultWebTestClient$DefaultBodyContentSpec.lambda$consumeWith$3(DefaultWebTestClient.java:665)
    at org.springframework.test.web.reactive.server.ExchangeResult.assertWithDiagnostics(ExchangeResult.java:223)
    at org.springframework.test.web.reactive.server.DefaultWebTestClient$DefaultBodyContentSpec.consumeWith(DefaultWebTestClient.java:665)

Looks like DefaultWebTestClient is setting the uriTemplate to null when constructing uri but can't find a way to override it.看起来 DefaultWebTestClient 在构造 uri 时将 uriTemplate 设置为 null,但找不到覆盖它的方法。

Unfortunately there's a regression in the latest Spring Framework 5.3 snapshots and I don't believe you can work around it.不幸的是,最新的 Spring Framework 5.3 快照中有一个回归,我认为您无法解决它。 I've raised a Spring Framework issue .我提出了一个Spring Framework 问题 In the meantime, you could use Spring Framework 5.3.0.RC1 as it was released before the problem was introduced.同时,您可以使用在问题出现之前发布的 Spring Framework 5.3.0.RC1。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM