首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将“requestParameters”作为数组

如何将“requestParameters”作为数组
EN

Stack Overflow用户
提问于 2019-03-09 15:11:26
回答 1查看 236关注 0票数 0

我有一个带有JSON 数组有效负载的服务,如下所示:

代码语言:javascript
复制
[{ message: "one"}, {message: "two"}]

如何使用spring-restdocs记录这个文档?

代码语言:javascript
复制
MessageContract contractOne = new MessageContract();
contractOne.setMessage("one");

List list = new ArrayList<>();
list.add(contractOne);

this.webTestClient
                .post().uri("/messages")
                .body(BodyInserters.fromObject(list))
                .exchange().expectStatus().isCreated().expectBody()
                .consumeWith(document("POST messages",
                        requestParameters(
                                parameterWithName("message").description("Massage we should save"),
                        ))
                );

我有个错误:

代码语言:javascript
复制
org.springframework.restdocs.snippet.SnippetException:
Request parameters with the following names were not found in the request:
[message, ...]

我认为restdocs没有看到字段,因为它包含一个数组。如何正确处理?

添加:

资源:

代码语言:javascript
复制
@PostMapping
private Mono<ResponseEntity> postMessage(@RequestBody List<MessageContract> contract) {
    return service
            .save(contract)
            .collectList()
            .thenReturn(new ResponseEntity(HttpStatus.CREATED));
}
EN

回答 1

Stack Overflow用户

发布于 2019-03-22 10:54:11

我刚刚为您创建了一个小测试,以便用requestFields.fieldWithPath显示数组文档。

请确认,这种方法对您有效。

代码语言:javascript
复制
    @Test
    public void documentRequestBodyArray() {
        webTestClient
                .post()
                .uri("/contract")
                .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
                .syncBody(List.of(new MessageContract("one"), new MessageContract("two")))
                .exchange()
                .expectStatus().isOk()
                .expectBody()
                .consumeWith(document("documentArray",
                        requestFields(
                                fieldWithPath("[]").description("a message array"),
                                fieldWithPath("[].message").description("a message"))));
    }

这里的MessageContract看起来像:

代码语言:javascript
复制
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class MessageContract {
    private String message;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55078737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档